; Anniversary version, using a custom graphic logo stored in this BOOT ROM at $3000, after the old BOOT images. ; No dedication message implemented yet, this version can be used to generate a video/animated gif to post on website ; This is the final revision, designed to work with a 64K system ROM ; that has the CP/M code in the upper 16KB page (C000-FFFF). ; The NMI BASIC formerly placed there is now loaded by loading the ; standard Spectrum BASIC in DRAM0 and then injecting in it the NMI routine ; which is stored separately in the free space at the end of the upper ; 16KB system ROM page, after the CP/M code. Then 3 bytes are also modified ; starting at 0066 in the BASIC code. ; Lines that must be modified for different video memory address (for testing in Spectrum emulators) ; are numbered and marked with --------@@@ at the end (27 lines in total for Boot Manager itself + 70 for anniversary logo) ; Video memory starts at C000 for CoBra startup config (both 64K and 80K configs) ; and at 4000 for standard Spectrum (emulator to test this assembled code) ; Memory locations used for temporary storage of variables: ; $8000 = Current hardware config ($64 if 64K, $80 if 80K) ; $8080-$808F = checksum results for SYSTEM ROM area $0000-$3FFF ; $8090-$809F = checksum results for SYSTEM ROM area $4000-$7FFF ; $80A0-$80AF = checksum results for SYSTEM ROM area $8000-$BFFF ; $80B0-$80BF = checksum results for SYSTEM ROM area $C000-$FFFF CBASE EQU $0400 ; character definitions table, base address ; (the first 32 (20h) chars are non printable ; so we don't use them, therefore the space ; between 0400-04FF can be used for code) ORG $0000 DI LD A,$80 LD R,A ; set bit 7 of R to 1 -> PO to 1 LD SP,$0000 ; set stack at memory top CALL DELAY ; a delay to allow 8255 to come out of reset CALL DELAY ; a delay to allow 8255 to come out of reset LD A,$03 ; OUT ($E3),A ; Reset OUT ($EB),A ; and disable OUT ($F3),A ; Z80-CTC OUT ($FB),A ; channels. LD A,$92 ; Control word for 8255: Mode Set flag=active, ; Group A: Select Mode 0, ; Port A set to Input mode, ; Port C (upper half) set to Output Mode, ; Group B: Select Mode 0, ; Port B set to Input Mode, ; Port C (lower half) set to Output Mode OUT ($DF),A ; Send control word to 8255 LD A,$40 OUT ($FE),A ; write 40h to port C of 8255 ; (border black, "SO" to 0, "O5" to 0, ; "O6" to 1 to allow access to video memory ; in the 80K hw startup config) JR MAIN ;############# LOAD SYSTEM FROM ROM ####### ; input: A=00 -> bit 3 (TO=A15) -> OPUS+BASIC/DEVIL+NMI ; A=08 -> bit 7 (SO=A14) -> OPUS/BASIC DEVIL/NMI ; for OPUS: LD A,$00: CALL RS: LD A,$08: JP RS ; for BASIC: LD A,$00: CALL RS: LD A,$08: JP ST ; for DEVIL: LD A,$00: CALL ST: LD A,$08: JP RS ; for NMI: LD A,$00: CALL ST: LD A,$08: JP ST RS ADD A,$06 ; reset bit 3 (TO=A15=0) or 7 (SO=A14=0) JR SOTO ST ADD A,$07 ; set bit 3 (TO=A15=1) or 7 (SO=A14=1) SOTO CP $08 OUT ($DF),A RET C ; return if bit 3 processed SYS LD HL,$6000 LD DE,$E000 LD BC,$2000 LDIR ; copy system code upper half in upper half DRAM#0 if 64K RAM ;############# 80K BASIC CONFIG ######## ; This routine needs to be present at this address ($0038) ; in the BOOT ROM, for Spectrum programs to be loaded from disk ; and run in CP/M 80K with the standard "CP/M game loader". ORG $0038 LD HL,$4000 ; 4000 is the start addr of BASIC EPROM in the startup hw config LD DE,$8000 ; 8000 is the start addr of DRAM#0 in the startup hw config LD BC,$4000 ; 4000 is the length of the SPECTRUM BASIC code (16 KB) LDIR ; copy system code into DRAM#0 for 80K RAM NMISYS EXX ; HL' contains the final jump address LD A,$03 ; OUT ($E3),A ; OUT ($EB),A ; OUT ($F3),A ; OUT ($FB),A ; XOR A ; OUT ($FD),A ; OUT ($FE),A ; write 03 to port C of 8255 ; (set border to white, SO=0, O5=0, O6=0) LD R,A ; set bit 7 of R to 0, prepare for BASIC hardware configuration JP (HL) ; change hardware configuration with a jump to (HL) ; ############ MAIN CODE ############ MAIN CALL ALOGO ; call anniversary routine LD A,$40 OUT ($FE),A ; ---------- DRAWING THE SCREEN ---------- LD HL,$8000 ; *1* video mem is at C000 (80->40 @ ????) -------@@@ LD DE,$8001 ; *2* video mem is at C000 (80->40 @ ????) -------@@@ LD BC,$7FFF ; *3* (7F->BF @ ????) -------@@@ LD (HL),0 LDIR LD HL,$D800 ; *4* attrs mem is at D800 (D8->58 @ ????) -------@@@ LD DE,$D801 ; *5* attrs mem is at D800 (D8->58 @ ????) -------@@@ LD BC,$300 LD (HL),$06 ; INK=yellow, PAPER=black LDIR LD HL,$DAE0 ; *6* --- cfg info background (DA->5A @ ????) -------@@@ LD DE,$DAE1 ; *7* (DA->5A @ ????) -------@@@ LD BC,$19 LD (HL),$05 ; INK=yellow, PAPER=black LDIR LD HL,$D842 ; *8* --- title background (D8->58 @ ????) -------@@@ LD DE,$D843 ; *9* (D8->58 @ ????) -------@@@ LD BC,$1B LD (HL),$16 ; INK=yellow, PAPER=red LDIR LD HL,$D8A2 ; *10* --- 64K section title bg (D8->58 @ ????) -------@@@ LD DE,$D8A3 ; *11* (D8->58 @ ????) -------@@@ LD BC,$0B LD (HL),$1E ; INK=yellow, PAPER=magenta LDIR LD HL,$D8B2 ; *12* --- 80K section title bg (D8->58 @ ????) -------@@@ LD DE,$D8B3 ; *13* (D8->58 @ ????) -------@@@ LD BC,$0B LD (HL),$0E ; INK=yellow, PAPER=blue LDIR LD HL,$1700 ; --- config info text LD DE,M_9 CALL MSG_PR ; ---------- START CONFIG DETECTION ---------- LD HL,MEM_T LD DE,$E000 ; if 80K hw config, this s/b in the VRAM (for "O6"=1) LD BC,$11 LDIR ; copy signature test string to $E000 LD A,$00 OUT ($FE),A ; write 00h to port C of 8255 ; (set "O6" to 0, if we are in 80K config then at ; E000 there s/b now DRAM#1 instead of VRAM) LD DE,MEM_T LD HL,$E000 LD BC,$11 SGV LD A,(DE) CPI JP PO,C64K ; config is 64K if entire signature string identical JR NZ,C80K ; config is 80K if anything is different INC DE JR SGV C64K LD HL,$171C ; --- configuration 64K LD DE,M_10 CALL MSG_PR LD HL,$D900 ; *14* --- 64K section first item (D9->59 @ ????) -------@@@ LD DE,$D901 ; *15* (D9->59 @ ????) -------@@@ LD BC,$0E LD (HL),$86 ; INK=yellow, PAPER=black, BLINK LDIR LD HL,$DAFB ; *16* --- config background (DA->5A @ ????) -------@@@ LD DE,$DAFC ; *17* (DA->5A @ ????) -------@@@ LD BC,$04 LD (HL),$1E ; INK=yellow, PAPER=magenta LDIR LD A,$64 LD ($8000),A ; (store computer config info at 8000) LD IX,(T_LC) ; position of top item in left column (color attr) LD IY,$01 LD A,$03 ; border magenta, "SO" to 0, "O5" to 0, "O6" to 0 OUT ($FE),A ; ("O6" to 1 not req'd for access to video memory ; in the 64K hw startup config) JR NXT5 C80K LD A,$41 ; border blue, "SO" to 0, "O5" to 0, OUT ($FE),A ; "O6" to 1 to allow access to video memory ; in the 80K hw startup config LD HL,$171C ; --- configuration 80K LD DE,M_11 CALL MSG_PR LD HL,$D911 ; *18* --- 80K section first item (D9->59 @ ????) -------@@@ LD DE,$D912 ; *19* (D9->59 @ ????) -------@@@ LD BC,$0E LD (HL),$86 ; INK=yellow, PAPER=black, BLINK LDIR LD HL,$DAFB ; *20* --- config background (DA->5A @ ????) -------@@@ LD DE,$DAFC ; *21* (DA->5A @ ????) -------@@@ LD BC,$04 LD (HL),$0E ; INK=yellow, PAPER=blue LDIR LD A,$80 LD ($8000),A ; (store computer config info at 8000) LD IX,(T_RC) ; position of top item in right column (color attr) LD IY,$11 ; ---------- END CONFIG DETECTION ---------- NXT5 LD HL,$0204 ; title LD DE,M_1 CALL MSG_PR LD HL,$0503 ; 64K section header LD DE,M_2 CALL MSG_PR LD HL,$0513 ; 80K section header LD DE,M_3 CALL MSG_PR LD HL,$0801 ; std boot (64k) LD DE,M_4 CALL MSG_PR LD HL,$0812 ; std boot (80k) LD DE,M_4 CALL MSG_PR LD HL,$0A01 ; std test (64k) LD DE,M_6 CALL MSG_PR LD HL,$0A12 ; std test (80k) LD DE,M_6 CALL MSG_PR LD HL,$0C01 ; homok test (64k) LD DE,M_7 CALL MSG_PR LD HL,$0C12 ; mastery boot (80k) LD DE,M_5 CALL MSG_PR ; ---------- KEYBOARD READING ---------- ; KBD LD A,($8000) CP $80 JR NZ,NOCPM LD A,$FE ; test row KA8 IN A,($FE) RLA RLA RLA ; test bit K5 (CTRL key) JR C,NOCPM LD A,$EF ; test row KA12 IN A,($FE) RRA ; test bit K0 (0 key) JP NC,CPM0 RRA ; test bit K1 (9 key) JP NC,CPM1 RRA ; test bit K2 (8 key) JP NC,CPM2 RRA ; test bit K3 (7 key) JP NC,CPM3 NOCPM LD A,$7F ; test row KA15 IN A,($FE) RLA RLA RLA ; test bit K5 (F4 key) CALL NC,CRC ; do system ROM checksums ; ********** ROM LOADING B.N.O.D *********** RLA ; test bit K4 (B key) JR NC,BASIC ; load Spectrum Basic RLA ; test bit K3 (N) JR NC,NMI ; load Spectrum Basic with NMI routine LD A,$DF ; test row KA13 IN A,($FE) RRA RRA ; test bit K1 (O key) JR NC,OPUS ; load OPUS LD A,$FD ; test row KA9 IN A,($FE) RRA RRA RRA ; test bit K2 (D key) JR NC,DEVIL ; load DEVIL ; ********** ROM LOADING 1,2,3,4 *********** LD A,$F7 ; test row KA11 IN A,($FE) RRA ; test bit K0 (1 key) JR NC,OPUS RRA ; test bit K1 (2 key) JR NC,BASIC RRA ; test bit K2 (3 key) JR NC,DEVIL RRA ; test bit K3 (4 key) JR NC,NMI ; ****************************************** LD A,$BF ; test row KA14 IN A,($FE) RRA ; check bit K0 (ENTER key) CALL NC,SEL ; select and run boot code LD A,$FE ; test row KA8 IN A,($FE) RRA ; check bit K0 (Caps Shift) JR C,KBD ; if CapsShift not pressed restart loop LD A,$EF ; test row KA12 IN A,($FE) RLA RLA RLA RLA ; test bit K4 (key 6, down arrow) PUSH AF CALL NC,DOWN POP AF RLA ; test bit K3 (key 7, up arrow) CALL NC,UP JR KBD ; ############ END MAIN CODE ############ ; ########## ROM SYSTEM LOADING ######### ; --------- using port C parallel load ;OPUS LD A,$00 ; SO=0, TO=0 ; JR LOAD ;BASIC LD A,$80 ; SO=1, TO=0 ; JR LOAD ;DEVIL LD A,$08 ; SO=0, TO=1 ; JR LOAD ;NMI LD A,$88 ; SO=1, TO=1 ;LOAD OUT ($FE),A ; LD HL,$0000 ; EXX ; JP SYS ; -------- using port C BSR Mode OPUS XOR A CALL RS JR O_D BASIC XOR A CALL RS JR B_N DEVIL XOR A CALL ST O_D LD A,$08 LD HL,$0000 EXX JP RS B_N LD A,$08 LD HL,$0000 EXX JP ST ; Routine for NMI BASIC loading using a 64K SYSTEM ROM ; that has CP/M (12800 bytes) + NMI code in the last quarter ; (C000-FFFF, where NMI BASIC used to be) ; The NMI BASIC is now loaded by loading the regular BASIC ; and then injecting the NMI code on top of it. NMI LD A,$80 OUT ($FE),A ; same as BASIC, set bit 7 (SO=A14=1) and reset bit 3 (TO=A15=0) LD HL,$0000 EXX SYS1 LD HL,$6000 LD DE,$E000 LD BC,$2000 LDIR ; copy system code upper half in upper half DRAM#0 if 64K RAM ;############# 80K BASIC CONFIG ############# LD HL,$4000 ; 4000 is the start addr of BASIC EPROM in the startup hw config LD DE,$8000 ; 8000 is the start addr of DRAM#0 in the startup hw config LD BC,$4000 ; 4000 is the length of the SPECTRUM BASIC code (16 KB) LDIR ; copy system code into DRAM#0 for 80K RAM ; ############ NMI CODE INJECTION ########### LD A,$88 ; SO=1, TO=1, access the CP/M ROM page OUT ($FE),A LD HL,$720F ; NMI code address in the CP/M ROM page LD DE,$F86F ; NMI code injection start address in 64K config LD BC,$013C ; NMI code length LDIR LD HL,$720F ; NMI code address in the CP/M ROM page LD DE,$B86F ; NMI code injection start address in 80K config LD BC,$013C ; NMI code length LDIR LD HL,$8066 ; \ LD (HL),$C3 ; \ modify 3 bytes at $0066 in BASIC LD HL,$3880 ; / to call the NMI code injected LD ($8067),HL ; / JP NMISYS ; jump to already existing copy of code below (to save space) ; EXX ; HL' contains the final jump address ; LD A,$03 ; ; OUT ($E3),A ; ; OUT ($EB),A ; ; OUT ($F3),A ; ; OUT ($FB),A ; ; XOR A ; ; OUT ($FD),A ; ; OUT ($FE),A ; write 03 to port C of 8255 ; ; (set border to white, SO=0, O5=0, O6=0) ; LD R,A ; set bit 7 of R to 0, prepare for BASIC hardware configuration ; JP (HL) ; change hardware configuration with a jump to (HL) ; ; ######### CP/M ROM LOADING ######### CPM0 LD A,$00 ; default drive 0 JR CPM CPM1 LD A,$01 ; default drive 1 JR CPM CPM2 LD A,$02 ; default drive 2 JR CPM CPM3 LD A,$03 ; default drive 3 CPM LD B,$8A ; bit2=1 (BORDER=RED), bit3=TO=A15=1 and bit7=SO=A14=1 to select 16K SYSTEM ROM with CPM LD C,$FE ; port C address OUT (C),B ; set LD HL,$4000 LD DE,$8000 LD BC,$3200 LDIR LD HL,$8004 ; DSK Byte, location used as mailbox from BOOT to CP/M for user choice of default drive LD (HL),A ; set default CP/M logical drive LD HL,$0000 ; jump address in upcoming CP/M config LD A,$40 OUT ($FE),A ; set O6=1 for CP/M config XOR A LD R,A JP (HL) ; ############ CHAR_PRINT ############ ; INPUTS: ; H = row to print character (0-23) ; L = column to print character (0-31) ; C = character code to print CHR_PR PUSH HL PUSH DE PUSH BC PUSH AF LD DE,0 ; DE = final screen mem addr LD A,H LD B,3 L1 SRL A ; 0 -> A ->CY RR E ; CY -> E -> CY DJNZ L1 ; row nr in bits 7,6,5 of E LD A,E ADD A,L ; add E to L LD E,A ; store result in E ##### lower final screen addr LD A,H OR $C0 ; *22* video mem is at C000 (C0->40 @ ????) -------@@@ AND $F8 ; reset lower 3 bits LD D,A ; store result in D ##### upper final screen addr LD HL,CBASE ; character definitions base addr LD B,0 ; BC = character to print on 16 bit RL B ; reset CY RL C ; ] multiply RL B ; ] contents of BC RL C ; RL B ; RL C ; RL B ; ] by 8 ADD HL,BC ; HL = char addr in char table LD B,8 ; counter for 8 lines TV of a char L2 LD A,(HL) ;\ LD (DE),A ; | print INC HL ; | the INC D ; | character DJNZ L2 ;/ POP AF POP BC POP DE POP HL RET ; ############ MSG PRINT ############ ; INPUTS: ; H = start row to print message (0-23) ; L = start column to print message (0-31) ; DE = message start address (ends with $00) MSG_PR LD A,(DE) LD C,A LD A,0 CP C RET Z ; return if char code is 0 LD A,$1F CP L RET M ; return if out of screen CALL CHR_PR INC L INC DE JR MSG_PR ; ######## KEYBOARD NON-PRESSED TEST ######## KEY_NP LD A,$FE ; test row KA8 IN A,($FE) AND $3F CP $3F ; check if any key pressed JR NZ,KEY_NP ; if any key still pressed read kbd again LD A,$EF ; test row KA12 IN A,($FE) AND $3F CP $3F ; check if any key pressed JR NZ,KEY_NP ; if any key still pressed, read kbd again LD B,$03 DL1 CALL DELAY DJNZ DL1 RET ; ########## HEX2ASCII ######### ; INPUTS: ; A = byte to print as ASCII hex digits ; OUTPUTS: ; B = upper digit ascii ; C = lower digit ascii H2A LD B,A SRL B SRL B SRL B SRL B ; B=upper digit AND $0F LD C,A ; C=lower digit LD A,B CALL TRAN LD B,A ; B=upper hex digit as ascii LD A,C CALL TRAN LD C,A ; B=lower hex digit as ascii RET ; ###### translate 4-bit hex digit in A into ASCII value TRAN CP $0A ; if A=00...09 JR C,NXT3 ; skip next line ADD A,$07 NXT3 ADD A,$30 ; A=ascii index RET ; ########## HEXPRINT ########## ; INPUTS: ; H = row to print character (0-23) ; L = column to print character (0-31) ; B = upper digit ascii ; C = lower digit ascii HEX_PR LD A,C LD C,B CALL CHR_PR INC L LD C,A CALL CHR_PR INC L RET ; ######### CHECKSUM PROCEDURE ######### ; INPUTS: ; IX = storage start addr for checksums (2 bytes per 2KB checked) CHS PUSH AF PUSH BC PUSH DE PUSH HL EXX PUSH AF PUSH BC PUSH DE PUSH HL EXX ; LD IX,$8080 ; storage addr for checksums LD B,$08 ; loop counter LD HL,$4000 ; BASIC ROM start addr (HL=mem pointer) L2K PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <---| LD DE,$0800 ; | EXX ; ***** | LD HL,$0000 ; HL'=0000 to start, HL' stores CRC value | EXX ; ***** | LCH1 LD A,(HL) ; <--- <--- <--- <--- <--- <----| read from (4000) | EXX ; ***** | | LD B,$08 ; loop counter | | LD C,A ; C=data byte | | LCH2 RLC C ; CY = bit 7<--- <--- <---| | | SBC A,A ; A=00-CY | | | LD E,A ; E=00(bit7=0) or FF | | | LD A,L ; (loop starts w L'=00) | | | AND $40 ; | | | SUB $01 ; | | | SBC A,A ; A=00(Lbit6=1) or FF | | | XOR E ; | | | LD E,A ; E=00 if bit7!=Lbit6 | | | LD A,H ; (loop starts w H'=00) | | | AND $01 ; | | | SUB $01 ; | | | SBC A,A ; A=00(Hbit1=1) or FF | | | XOR E ; | | | LD E,A ; E=00 if [(Hbit1=1)&(bit7!=Lbit6)]||[(Hbit1=0)&(bit7=Lbit6)] LD A,H ; | | | AND $08 ; | | | SUB $01 ; | | | SBC A,A ; A=00(Hbit3=1) or FF | | | XOR E ; | | | LD E,A ; | | | LD A,H ; | | | AND $80 ; | | | SUB $01 ; | | | SBC A,A ; A=00(Hbit7=1) or FF | | | XOR E ; | | | RLCA ; | | | RL L ; | | | RL H ; | | | DJNZ LCH2 ; ---> 8 loops -----> --->| | | EXX ; ***** | | INC HL ; increment mem pointer | | DEC DE ; decrement loop counter | | LD A,D ;\ test if | | OR E ;/ DE=0000 | | JR NZ,LCH1 ; ---> ---> 800h loops ---> --->| | EXX ; ***** | LD (IX+0),H ; store high byte of checksum | LD (IX+1),L ; store low byte of checksum | PUSH AF PUSH BC LD HL,($8002) LD A,(IX+0) CALL H2A CALL HEX_PR LD A,(IX+1) CALL H2A CALL HEX_PR LD ($8002),HL POP BC POP AF INC IX ; | INC IX ; | EXX ; ***** | POP BC ; B = loop counter | DJNZ L2K ; ---> 8 loops -----> ---> ---> ---> ---> ---> ---> --->| EXX POP HL POP DE POP BC POP AF EXX POP HL POP DE POP BC POP AF RET ; ########### CHECKSUMS ########## CRC PUSH AF PUSH BC PUSH IX LD HL,$1000 ; ROM checksum message LD DE,M_12 CALL MSG_PR LD IX,$8080 LD A,($8000) CP $64 JR Z,CKS1 LD B,$41 ; TO=0,SO=0 select ROM 0000-3FFF (80K config) JR CKS2 CKS1 LD B,$43 ; TO=0,SO=0 select ROM 0000-3FFF (64K config) CKS2 LD HL,$1017 ; address range being checksumed, 0000-3FFF LD DE,M_13 CALL MSG_PR LD HL,$1200 LD ($8002),HL CALL DO1 ; do checksums for ROM 0000-3FFF, store at 8080-808F SET 7,B ; TO=0,SO=1 select ROM 4000-7FFF LD HL,$1017 ; address range being checksumed, 4000-7FFF LD DE,M_14 CALL MSG_PR LD HL,$1300 LD ($8002),HL CALL DO1 ; do checksums for ROM 4000-7FFF, store at 8090-809F RES 7,B SET 3,B ; TO=1,SO=0 select ROM 8000-BFFF LD HL,$1017 ; address range being checksumed, 8000-BFFF LD DE,M_15 CALL MSG_PR LD HL,$1400 LD ($8002),HL CALL DO1 ; do checksums for ROM 8000-BFFF, store at 80A0-80AF SET 7,B ; TO=1,SO=1 select ROM C000-FFFF LD HL,$1017 ; address range being checksumed, C000-FFFF LD DE,M_16 CALL MSG_PR LD HL,$1500 LD ($8002),HL CALL DO1 ; do checksums for ROM 8000-BFFF, store at 80B0-80BF ; ---------- erase current range ----------- LD HL,$1017 ; address range being checksumed, C000-FFFF LD DE,M_18 CALL MSG_PR ; ---------- highlight groups of 4 digits ---------- LD HL,M_13 ; smart reuse of already available data LD BC,$04 LD DE,$DA44 ; *23* (DA->5A @ ????) -------@@@ EXX LD B,$10 REP1 EXX PUSH HL PUSH BC LDIR POP BC POP HL INC DE INC DE INC DE INC DE EXX DJNZ REP1 EXX ; -------------------------------------------------- POP IX POP BC POP AF RET ; this routine moved below inside char definitions table to make room for more code ;DO1 PUSH BC ; backup current ROM zone selection ; LD A,B ; OUT ($FE),A ; CALL CHS ; checksums for ROM 0000-4000 stored at 8080-808F ; POP BC ; restore current ROM zone selection ; RET ; ####### MOVE SELECTION UP ###### UP CALL KEY_NP PUSH IX LD A,($8000) CP $64 LD HL,T_LC JR Z,NXT6 LD HL,T_RC NXT6 POP BC LD A,C CP (HL) ; compare low byte of T_LC JR NZ,NXT1 ; skip fwd if diff INC HL LD A,B CP (HL) ; compare high byte of T_LC RET Z ; if already on top item, exit NXT1 PUSH IX POP HL LD D,H LD E,L INC DE LD BC,$0E LD (HL),$06 ; INK=yellow, PAPER=black, BLINK=OFF LDIR ; turn BLINK OFF PUSH IX POP HL LD A,(R_I) LD DE,0 LD E,A RLC D ; reset CY SBC HL,DE PUSH HL POP IX ; update IX with current pos of selected item DEC IY LD D,H LD E,L INC DE LD BC,$0E LD (HL),$86 ; INK=yellow, PAPER=black, BLINK LDIR ; turn BLINK ON RET ; ####### MOVE SELECTION DOWN ###### DOWN CALL KEY_NP PUSH IX LD A,($8000) CP $64 LD HL,B_LC JR Z,NXT7 LD HL,B_RC NXT7 POP BC LD A,C CP (HL) ; compare low byte of B_LC JR NZ,NXT2 ; skip fwd if diff INC HL LD A,B CP (HL) ; compare high byte of B_LC RET Z ; if already on bottom item, exit NXT2 PUSH IX POP HL LD D,H LD E,L INC DE LD BC,$0E LD (HL),$06 ; INK=yellow, PAPER=black, BLINK=OFF LDIR ; turn BLINK OFF PUSH IX POP HL LD A,(R_I) LD DE,0 LD E,A ADD HL,DE PUSH HL POP IX ; update IX with current pos of selected item INC IY LD D,H LD E,L INC DE LD BC,$0E LD (HL),$86 ; INK=yellow, PAPER=black, BLINK LDIR ; turn BLINK ON RET ; ########### BOOT SELECT ######## SEL PUSH BC ; backup BC PUSH IY POP BC LD A,C CP $01 JP Z,BOOT64 CP $02 JP Z,TEST64 CP $03 JP Z,HOMOK CP $11 JP Z,BOOT80 CP $12 JP Z,TEST64 CP $13 JP Z,MASTY POP BC ; restore BC RET BOOT64 EQU $0800 ; address of standard 64K boot BOOT80 EQU $1000 ; address of standard 80K boot HOMOK EQU $1800 ; address of HOMOK test (64K) TEST64 EQU $2000 ; address of STD test (64K) MASTY EQU $2800 ; address of MASTERY boot (80K) ; ########### CHARACTER DEFINITIONS ########### ORG $500 C_SP DEFB 0,0,0,0,0,0,0,0 ORG $508 ; to save space, this little routine is placed between the SPACE and APOSTROPHE char definitions DELAY EXX LD BC,$1FFF LD DE,$9001 LD HL,$9000 LD (HL),0 LDIR EXX RET ORG $518 C_STAR0 DEFB $00,$00,$00,$00,$10,$00,$00,$00 ; char code in hex is $23 C_STAR1 DEFB $00,$00,$00,$10,$38,$10,$00,$00 ; char code in hex is $24 C_STAR2 DEFB $00,$00,$10,$10,$38,$10,$10,$00 ; char code in hex is $25 C_STAR3 DEFB $00,$10,$10,$38,$FE,$38,$10,$10 ; char code in hex is $26 ORG $538 C_APST DEFB $18,$18,$10,$00,$00,$00,$00,0 ORG $540 DO1 PUSH BC ; backup current ROM zone selection LD A,B OUT ($FE),A CALL CHS ; checksums for ROM 0000-4000 stored at 8080-808F POP BC ; restore current ROM zone selection RET ORG $568 C_MINUS DEFB $00,$00,$00,$7E,$7E,$00,$00 DEFB 0 ORG $580 C_0 DEFB $3C,$42,$46,$6A,$72,$62,$3C DEFB 0 C_1 DEFB $18,$30,$50,$18,$18,$18,$18 DEFB 0 C_2 DEFB $3C,$42,$02,$1C,$70,$60,$7E DEFB 0 C_3 DEFB $3C,$42,$02,$1C,$06,$46,$3C DEFB 0 C_4 DEFB $40,$40,$48,$7E,$0C,$0C,$0C DEFB 0 C_5 DEFB $7C,$60,$60,$7C,$02,$02,$7C DEFB 0 C_6 DEFB $3C,$42,$40,$7C,$62,$62,$3C DEFB 0 C_7 DEFB $7E,$02,$02,$0E,$1C,$38,$70 DEFB 0 C_8 DEFB $3C,$62,$62,$3C,$62,$62,$3C DEFB 0 C_9 DEFB $3C,$62,$62,$3E,$02,$62,$3C DEFB 0 ORG $5D0 C_COLN DEFB $00,$18,$18,$00,$18,$18,$00 DEFB 0 ORG $5D8 DELAY1 EXX ; to save space, this little routine is placed between the COLON and A char definitions (chars in between are not used) LD BC,$0500 LD DE,$9001 LD HL,$9000 LD (HL),0 LDIR EXX RET DELAY2 EXX ; to save space, this little routine is placed between the COLON and A char definitions (chars in between are not used) LD BC,$05E0 LD DE,$9001 LD HL,$9000 LD (HL),0 LDIR EXX RET ORG $608 C_A DEFB $3C,$42,$42,$62,$7E,$62,$62 DEFB 0 C_B DEFB $7C,$42,$42,$7C,$62,$62,$7C DEFB 0 C_C DEFB $3C,$42,$40,$60,$60,$62,$3C DEFB 0 C_D DEFB $7C,$42,$42,$62,$62,$62,$7C DEFB 0 C_E DEFB $7E,$40,$40,$78,$60,$60,$7E DEFB 0 C_F DEFB $7E,$40,$40,$7C,$60,$60,$60 DEFB 0 C_G DEFB $3C,$42,$40,$60,$6E,$66,$3C DEFB 0 C_H DEFB $42,$42,$42,$7E,$62,$62,$62 DEFB 0 C_I DEFB $3C,$10,$10,$18,$18,$18,$3C DEFB 0 C_J DEFB $1E,$04,$04,$0C,$6C,$6C,$38 DEFB 0 C_K DEFB $46,$44,$48,$70,$68,$64,$66 DEFB 0 C_L DEFB $40,$40,$40,$60,$60,$60,$7E DEFB 0 C_M DEFB $42,$66,$5E,$6A,$62,$62,$62 DEFB 0 C_N DEFB $42,$62,$52,$6A,$66,$62,$62 DEFB 0 C_O DEFB $3C,$42,$42,$62,$62,$62,$3C DEFB 0 C_P DEFB $7C,$42,$42,$62,$7C,$60,$60 DEFB 0 C_Q DEFB $3C,$42,$42,$62,$6A,$64,$3A DEFB 0 C_R DEFB $7C,$42,$42,$62,$7C,$6C,$66 DEFB 0 C_S DEFB $3C,$62,$60,$3C,$02,$62,$3C DEFB 0 C_T DEFB $7E,$10,$10,$18,$18,$18,$18 DEFB 0 C_U DEFB $42,$42,$42,$62,$62,$62,$3C DEFB 0 C_V DEFB $42,$42,$42,$62,$62,$34,$18 DEFB 0 C_W DEFB $42,$42,$4A,$6A,$6A,$76,$24 DEFB 0 C_X DEFB $62,$62,$34,$08,$34,$62,$62 DEFB 0 C_Y DEFB $42,$42,$42,$24,$18,$18,$18 DEFB 0 C_Z DEFB $7E,$04,$08,$10,$20,$60,$7E DEFB 0 ; ########### MESSAGES ########### ORG $700 M_1 DEFM "COBRA BOOT CODE SELECTOR" DEFB 0 M_2 DEFM "64K CONFIG" DEFB 0 M_3 DEFM "80K CONFIG" DEFB 0 M_4 DEFM "STANDARD BOOT" DEFB 0 M_5 DEFM "MASTERY BOOT" DEFB 0 M_6 DEFM "STANDARD TEST" DEFB 0 M_7 DEFM "HOMOK TEST" DEFB 0 M_8 DEFM "MODIFIED BOOT" DEFB 0 M_9 DEFM "CURRENT CONFIG IS:" DEFB 0 M_10 DEFM "64K" DEFB 0 M_11 DEFM "80K" DEFB 0 M_12 DEFM "SYSTEM ROM CHECKSUM:" DEFB 0 M_13 DEFM "0000-3FFF" DEFB 0 M_14 DEFM "4000-7FFF" DEFB 0 M_15 DEFM "8000-BFFF" DEFB 0 M_16 DEFM "C000-FFFF" DEFB 0 M_17 DEFM "BOOT ROM CHECKSUM:" DEFB 0 M_18 DEFM " " DEFB 0 ; ########### MEMORY TEST SIGNATURE ########### MEM_T DEFM "*COBRA*HW*CFG*DT*" ; ########### SCREEN POSITIONS ########## T_LC DEFW $D900 ; *24* top item left column (color attr start) (D9->59 @ ????) -------@@@ T_RC DEFW $D911 ; *25* top item right column (color attr start) (D9->59 @ ????) -------@@@ ; ***** these are values for 4 items per menu ***** ;B_LC DEFW $D9C0 ; *26* bottom item left column (color attr start) (D9->59 @ ????) -------@@@ ;B_RC DEFW $D9D1 ; *27* bottom item right column (color attr start) (D9->59 @ ????) -------@@@ ; ***** these are values for 3 items per menu ***** B_LC DEFW $D980 ; *26* bottom item left column (color attr start) (D9->59 @ ????) -------@@@ B_RC DEFW $D991 ; *27* bottom item right column (color attr start) (D9->59 @ ????) -------@@@ R_I DEFB $40 ; row interval (color attr addr diff) ; ################################ ANNIVERSARY COBRA LOGO ####################################### ; Lines that must be modified for different video memory address (for testing in Spectrum emulators) ; are numbered and marked with --------@@@ at the end (70 lines in total for anniversary logo) ; Video memory starts at C000 for CoBra startup config (both 64K and 80K configs) ; and at 4000 for standard Spectrum (emulator to test this assembled code) ORG $3000 ; This is $3000 in the BOOT ROM where we still have unused space after the original 2K BOOTs ALOGO DI ; ######## COBRA GRAPHIC LOGO ########### LD HL,$C000 ; *1* video mem is at C000 (C0->40 @ 0093) -------@@@ LD DE,$C001 ; *2* video mem is at C000 (C0->40 @ 0093) -------@@@ LD BC,$1AFF LD (HL),0 LDIR ; LD HL,$D900 ; *3* video attr start addr for 2nd third of video RAM in startup hw cfg (D9->59 @ 0093) -------@@@ LD B,$08 L0096 PUSH BC LD BC,$0C05 ; write "05" as color attribute L009A LD (HL),C ; for the first 12 characters INC HL ; of the middle third in the DJNZ L009A ; Spectrum screen (INK=cyan, PAPER=black) LD BC,$1403 ; write "03" as color attribute L00A1 LD (HL),C ; for the next 20 characters INC HL ; (INK==white, PAPER=black) DJNZ L00A1 ; so in total 32 characters (one line) POP BC DJNZ L0096 ; repeat the above 7 times,(all 8 lines in the middle third of screen) EXX LD HL,L0188 ; HL' used as pointer to data block start address (0188) EXX LD HL,$CBB9 ; *4* address within serial video RAM, middle third of screen (CB->4B @ 00AF) -------@@@ LD DE,$01FE ; data to be written in there LD A,$04 LD B,$09 L00B7 PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- LD B,A ; | L00B9 LD (HL),D ; write "01" at CBB9 <--- <--- <- <--- <-| | INC HL ; | | | LD (HL),E ; write "FE" at CBBA | | | EXX ; | | | LD A,(HL) ; read first byte of data (FF) | | | INC HL ; increment pointer (HL'=0189) | | | EXX ; | | | LD C,A ; C = data byte | | | ADD A,L ; A = data byte + L = B9 + CY | | | LD L,A ; L = data byte + L | | | JR NC,L00C6 ; | | | INC H ; H=CB+1=CC | | | L00C6 DJNZ L00B9 ; ---> ---> ---> ---> ---> --->>> | | LD B,C ; | | EXX ; | | LD E,(HL) ; Read 2 bytes | | INC HL ; of data into | | LD D,(HL) ; DE' register. | | INC HL ; Increment pointer | | PUSH DE ; | | EXX ; | | POP HL ; HL = 2 data bytes | | SLA E ; | | RL D ; | | JR NC,L00B9 ; ---> ---> ---> ---> ---> ---> ---> ---> | RR D ; | RR E ; | LD D,$FF ; | L00DD SLA D ; <---- | RL E ; | | JR C,L00DD ; ----> | LD A,D ; | CPL ; | LD D,A ; | LD E,$FF ; | LD A,C ; | POP BC ; | DJNZ L00B7 ; ---> ---> ---> ---> ---> ---> ---> ---> ---> ---> LD E,L LD D,H EXX PUSH HL EXX POP HL LD B,$0B L00F4 PUSH BC ; <--- <--- LD B,A ; | LD A,(HL) ; | INC HL ; | L00F8 LD (DE),A ; <---- | INC DE ; | | DJNZ L00F8 ; ----> | LD A,(HL) ; | INC HL ; | LD E,(HL) ; | INC HL ; | LD D,(HL) ; | INC HL ; | POP BC ; | DJNZ L00F4 ; ---> ---> LD HL,L03E0 ; addr of color attr for color pattern under logo (within data block) LD DE,$DA8C ; *5* addr of color attr for color pattern under logo (within video mem) (DA->5A @ ????) -------@@@ LD BC,$0008 ; length of color pattern under logo LDIR JP START ; ######### VERTICAL SCROLL FOR ANNIVERSARY COBRA LOGO (to move it into the middle 1/3 screen) ######### ; This routine is supposed to scroll the bottom 1/3 of screen ; up into the middle 1/3, 1 pixel line at a time, not including color attrs VSCR2 LD IX, $C800 ; *6* start of video region to shift (anniv CoBra logo) (C8->48 @ ????) -------@@@ LD ($8000), IX ; store parameter at $8000 LD IX, $D000 ; *7* middle point of video region to shift (anniv CoBra logo) (D0->50 @ ????) -------@@@ LD ($8002), IX ; store parameter at $8002 ; LD IX, $D900 ; *8* start of attrs of video region to shift (anniv CoBra logo) (D9->59 @ ????) #------@@@ ; LD ($8004), IX ; store parameter at $8004 LD IX, $8006 ; addr of parameter dictating if we scroll color attrs too LD (IX+0), $00 ; $FF - scroll attrs, $00 - don't scroll attrs JR VSCR ; ######### VERTICAL SCROLL FOR ORIGINAL COBRA LOGO (to move it into the upper 1/3 screen) ######### ; This routine is supposed to scroll the middle 1/3 of screen ; up into the top 1/3, 1 pixel line at a time, including color attrs VSCR1 LD IX, $C000 ; *9* start of video region to shift (orig CoBra logo) (C0->40 @ ????) -------@@@ LD ($8000), IX ; store parameter at $8000 LD IX, $C800 ; *10* middle point of video region to shift (orig CoBra logo) (C8->48 @ ????) -------@@@ LD ($8002), IX ; store parameter at $8002 LD IX, $D800 ; *11* start of attrs of video region to shift (orig CoBra logo) (D8->58 @ ????) -------@@@ LD ($8004), IX ; store parameter at $8004 LD IX, $8006 ; addr of parameter dictating if we scroll color attrs too LD (IX+0), $FF ; $FF - scroll attrs, $00 - don't scroll attrs VSCR LD HL, $0040 ; total pixel line shift counter PUSH HL EX AF, AF' SHFS LD A, $10 ; 16 char rows to shift up by 1 pix EX AF, AF' LD DE, ($8000) ; first parameter to this routine, start of scrolled serial video PUSH DE ; *** INITIALIZE (top pix line of first char row) LD HL, ($8000) ; first parameter to this routine, start of scrolled serial video LD BC, $100 ADD HL, BC ; start of scrolled serial video + $100 (second pixel line) CH2 LD A, $07 ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <---| CH1 LD BC, $0020 ; <--- <--- <--- <--- <--- <--- <--- <--- <-----| | LDIR ; | | LD BC, $00E0 ; | | ADD HL, BC ; | | EX DE, HL ; current char row being shifted | | ADD HL, BC ; | | EX DE, HL ; | | DEC A ; | | JR NZ, CH1 ; shift current char row 1 px up ---> ---> --->| | EX AF, AF' ; | DEC A ; was this the last char row to shift? | JR Z, SHFE ; | ; EX AF, AF' ; | PUSH DE ; start of last pix line in last char row processed | EXX ; | POP DE ; start of last pix line in last char row processed | POP HL ; *** RESTORE (top pix line of prev char row) | LD BC, $0020 ; | ADD HL, BC ; start of top pix line in next char row | ; EX AF, AF' ; | CP $08 ; end of top 1/3? | JR NZ, S2 LD HL, ($8002) ; start of first pix line in second 1/3 | S2 PUSH HL ; *** UPDATE (to top pix line in next char row) | PUSH HL ; | LDIR ; pix line carry betw char rows | EXX ; | EX AF, AF' ; | POP DE ; top pix line in next char row | LD H, D ; | LD L, E ; | LD BC, $0100 ; | ADD HL, BC ; 2nd pix line in next char row | JR CH2 ; restart shifting next char row ---> ---> ---> ---> ->| SHFE EX AF, AF' POP DE ; balance stack between shift cycles EXX POP HL ; total pixel line shift counter DEC L JR Z, EOSH PUSH HL ; update total pixel shift counter BIT 0, L ; test if multiple of 8 JR NZ, S1 BIT 1, L JR NZ, S1 BIT 2, L JR Z, S1 LD IX, $8006 ; addr of parameter dictating if we scroll color attrs too RLC (IX+0) ; test if we scroll attrs or not JR NC, S1 ; skip scrolling if ($8006)=$00 LD DE, ($8004) LD HL, ($8004) LD BC, $0020 ADD HL, BC LD BC, $01E0 ; size of attr data to shift LDIR ; shift color attr one row up S1 EXX JR SHFS EOSH EXX RET ; ######### ANNIVERSARY LOGO ROUTINE ####################################### ANNIV LD HL, $DA00 ; *12* (DA->5A @ ????) -------@@@ LD DE, $DA01 ; *13* (DA->5A @ ????) -------@@@ LD BC, $FF LD (HL), 0 LDIR ; blank the bottom 1/3 screen by clearing video attrs (serial data will be invisible) LD HL, $C800 ; *14* (C8->48 @ ????) -------@@@ LD DE, $C801 ; *15* (C8->48 @ ????) -------@@@ LD BC, $07FF LD (HL), 0 LDIR ; clear middle 1/3 screen serial video so color attrs won't be visible ; -------------------------- replacing color attr data with algorithm -------------------------------- ; LD HL, L5900 ; LD DE, $D900 ; *16* (D9->59 @ ????) -------@@@ ; LD BC, $100 ; LDIR ; load the middle 1/3 screen color attrs for future place of anniv. logo LD HL, $D900 ; *16* (D9->59 @ ????) -------@@@ LD DE, $D901 ; *17* (D9->59 @ ????) -------@@@ LD BC, $00FF LD (HL),$00 LDIR LD A,$08 LD HL, $D904 ; *18* (D9->59 @ ????) -------@@@ LD DE, $D905 ; *19* (D9->59 @ ????) -------@@@ CLR1 LD BC, $000A LD (HL),$05 LDIR LD BC, $16 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL DEC A JR NZ,CLR1 LD A,$05 LD HL, $D970 ; *20* (D9->59 @ ????) -------@@@ LD DE, $D971 ; *21* (D9->59 @ ????) -------@@@ CLR2 LD BC, $000A LD (HL),$03 LDIR LD BC, $16 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL DEC A JR NZ,CLR2 ; -------------------------- replacing serial video data with algorithm -------------------------------- ; LD HL, L4800 ; start of serial video data of anniv. logo ; LD DE, $D000 ; *17* start of last 1/3 serial video screen (D0->50 @ ????) -------@@@ ; LD BC, $800 ; size of 1/3 serial video screen ; LDIR ; load the anniv logo in the bottom 1/3 screen LD HL,$D000 ; *22* start of last 1/3 serial video screen (D0->50 @ ????) -------@@@ LD DE,$D001 ; *23* start of last 1/3 serial video screen (D0->50 @ ????) -------@@@ LD BC,$07FF LD (HL),$00 LDIR EX AF,AF' LD A,$08 LD HL,L5025 LD DE,$D025 ; *24* start of last 1/3 serial video screen (D0->50 @ ????) -------@@@ SER2 EX AF,AF' LD A,$07 SER1 LD BC,$0016 LDIR LD BC,$0A EX DE,HL ; increase DE ADD HL,BC ; by $EA EX DE,HL ; so it can skip to the next line of $20 + offset 5 DEC A JR NZ,SER1 ; 7 cycles LD BC,$20 EX DE,HL ; increase DE ADD HL,BC ; by $20 EX DE,HL ; so it can start the next group of 8 lines (skipping line 1) EX AF,AF' DEC A JR NZ,SER2 ; 8 cycles EX AF,AF' RET PHBASE DEFB $23,$46 DEFB $24,$43 DEFB $25,$44 DEFB $26,$41 ; character codes for the star phases PHBAS1 DEFB $25,$42 ; alternating with color attrs for phases DEFB $24,$46 DEFB $23,$42 DEFB $20,$00 ;START LD BC,$3002 START LD B,$30 L0DEL CALL DELAY LD A,$00 IN A, ($FE) AND $3F CP $3F RET NZ ; Return to Boot Manager if any key pressed DJNZ L0DEL ; DEC C ; JR NZ,L0DEL CALL VSCR1 ; move CoBra logo up CALL ANNIV ; load anniversary graphics CALL VSCR2 ; scroll (reveal) anniversary graphics LD HL,$1005 LD DE,M_20 ; "ITC BRASOV - 1986-2016" CALL MSG_PR LD HL,$1101 LD DE,M_21 ; "30 ANI DE LA PROIECTAREA COBRA" CALL MSG_PR LD HL,$1201 LD DE,M_31 CALL MSG_PR LD HL,$1308 LD DE,M_22 ; "GHEORGHE TOACSE" CALL MSG_PR ; we are displaying these by scrolling into view instead (see below) ; LD HL,$1401 ; LD DE,M_23 ; "VASILE PRODAN" ; CALL MSG_PR ; LD HL,$1501 ; LD DE,M_24 ; "WAGNER BERND" ; CALL MSG_PR ; LD HL,$1601 ; LD DE,M_25 ; "SORIN FINICHIU" ; CALL MSG_PR ; LD HL,$1701 ; LD DE,M_26 ; "MIRCEA UNGUR" ; CALL MSG_PR ; LD HL,$1411 ; LD DE,M_27 ; "MARCEL AREFTA" ; CALL MSG_PR ; LD HL,$1511 ; LD DE,M_28 ; "MIRCEA POP" ; CALL MSG_PR ;; LD HL,$1611 ; LD DE,M_29 ; "SORIN CISMAS" ; CALL MSG_PR ; LD HL,$1711 ; LD DE,M_30 ; "ALEXANDRU ANTAL" ; CALL MSG_PR CALL DELAY LD DE,$DA01 ; *25* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD HL,$DA00 ; *26* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD BC,$1F LD (HL),$44 LDIR ; set color attrs for "ITC BRASOV - 1986-2016" CALL DELAY4 LD DE,$DA21 ; *27* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD HL,$DA20 ; *28* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD BC,$1F LD (HL),$42 LDIR ; set color attrs for "30 ANI DE LA PROIECTAREA COBRA" CALL DELAY4 LD B,$10 FLASH2 PUSH BC LD B,$0C LD IX,FLASH FLASH1 PUSH BC LD A,(IX+0) LD DE,$DA41 ; *29* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD HL,$DA40 ; *30* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD BC,$1F LD (HL),A LDIR ; set color attrs for "DE CATRE O ECHIPA FORMATA DIN:" OUT ($FE),A CALL DELAY5 LD A,$40 OUT ($FE),A CALL DELAY2 INC IX POP BC DJNZ FLASH1 POP BC DJNZ FLASH2 ; LD DE,$5A41 ; LD HL,$5A40 ; LD BC,$1F ; LD (HL),$41 ; LDIR ; set color attrs for "DE CATRE O ECHIPA FORMATA DIN:" CALL DELAY4 LD DE,$DA61 ; *31* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD HL,$DA60 ; *32* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD BC,$1F LD (HL),$44 LDIR ; set color attrs for "GHEORGHE TOACSE" CALL DELAY4 LD A,$04 LD DE,$DA81 ; *33* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ LD HL,$DA80 ; *34* start of last 1/3 serial video screen (DA->5A @ ????) -------@@@ TEAM LD BC,$0F LD (HL),$05 ; INK=cyan for left side of lower 1/3 LDIR INC DE INC HL LD BC,$0F LD (HL),$03 ; INK=magenta for right side of lower 1/3 LDIR INC DE INC HL DEC A JR NZ,TEAM LD A,$04 ; char row to shift LD IX,M_23 ; "VASILE PRODAN" CALL MSGPSHR LD A,$05 ; char row to shift LD IX,M_24 ; "WAGNER BERND" CALL MSGPSHR LD A,$06 ; char row to shift LD IX,M_25 ; "SORIN FINICHIU" CALL MSGPSHR LD A,$07 ; char row to shift LD IX,M_26 ; "MIRCEA UNGUR" CALL MSGPSHR LD A,$04 ; char row to shift LD IX,M_27 ; "MARCEL AREFTA" CALL MSGPSHL LD A,$05 ; char row to shift LD IX,M_28 ; "MIRCEA POP" CALL MSGPSHL LD A,$06 ; char row to shift LD IX,M_29 ; "SORIN CISMAS" CALL MSGPSHL LD A,$07 ; char row to shift LD IX,M_30 ; "ALEXANDRU ANTAL" CALL MSGPSHL JP L0110 ; ########## GENERATE STARS ########### ; PARAMETERS: IX=start of stars, IY=start phase, A=nr of stars ; LD IX,SBASE ; start of stars to process ; LD IY,PHBASE STARS LD D,A LD BC,$0400 ; B = number of cycles = number of star phases = 8 STARS1 PUSH BC ; *** phase nr PUSH IX ; *** start of stars to process LD B,D ; B = number of stars to process in one phase STARS2 PUSH BC ; *** nr of stars (in B) LD L,(IX+0) ; column of current star LD H,(IX+1) ; row of current star LD A,(IY+0) ; star phase to print for all stars in this cycle LD C,A ; current star phase (char code to print) CALL CHR_PR ; print star phase ; computing this from row/column values instead of storing direct addresses (save space) ; LD L,(IX+2) ; video attr addr low byte ; LD H,(IX+3) ; HL = addr of video attr for crt star EXX LD B,(IX+1) ; row of current star INC B LD DE,$0020 LD HL,$D7E0 ; *35* start of last 1/3 serial video screen (D7->57 @ ????) -------@@@ ATTC ADD HL,DE DJNZ ATTC LD D,$00 LD E,(IX+0) ; column of current star ADD HL,DE PUSH HL EXX POP HL LD A,(IY+1) ; current ink for this cycle LD (HL),A ; set it for the star just printed INC IX INC IX ; INC IX ; commented this out because we don't store attr addresses anymore to save 2 bytes per star ; INC IX POP BC ; *** nr of stars (in B) DJNZ STARS2 CALL DELAY2 ; end of one cycle (phase) POP IX ; reset start of stars INC IY INC IY ; point to next star phase to print POP BC ; *** phase nr DJNZ STARS1 RET L0110 LD IX,P01 LD IY,PHBASE LD A,$01 CALL STARS LD IX,P02 LD IY,PHBASE LD A,$03 CALL STARS LD IX,P05 LD IY,PHBASE LD A,$02 CALL STARS LD IX,P01 LD IY,PHBAS1 LD A,$01 CALL STARS LD IX,P07 LD IY,PHBASE LD A,$03 CALL STARS LD IX,P02 LD IY,PHBAS1 LD A,$03 CALL STARS LD IX,P10 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P05 LD IY,PHBAS1 LD A,$02 CALL STARS LD IX,P13 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P07 LD IY,PHBAS1 LD A,$03 CALL STARS LD IX,P16 LD IY,PHBASE LD A,$07 CALL STARS LD IX,P10 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P22 LD IY,PHBASE LD A,$09 CALL STARS LD IX,P13 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P29 LD IY,PHBASE LD A,$06 CALL STARS LD IX,P16 LD IY,PHBAS1 LD A,$07 CALL STARS LD IX,P35 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P22 LD IY,PHBAS1 LD A,$09 CALL STARS LD IX,P39 LD IY,PHBASE LD A,$03 CALL STARS LD IX,P29 LD IY,PHBAS1 LD A,$06 CALL STARS LD IX,P42 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P35 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P47 LD IY,PHBASE LD A,$05 CALL STARS LD IX,P39 LD IY,PHBAS1 LD A,$03 CALL STARS LD IX,P52 LD IY,PHBASE LD A,$06 CALL STARS LD IX,P42 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P58 LD IY,PHBASE LD A,$06 CALL STARS LD IX,P47 LD IY,PHBAS1 LD A,$05 CALL STARS LD IX,P64 LD IY,PHBASE LD A,$06 CALL STARS LD IX,P52 LD IY,PHBAS1 LD A,$06 CALL STARS LD IX,P70 LD IY,PHBASE LD A,$05 CALL STARS LD IX,P58 LD IY,PHBAS1 LD A,$06 CALL STARS LD IX,P75 LD IY,PHBASE LD A,$05 CALL STARS LD IX,P64 LD IY,PHBAS1 LD A,$06 CALL STARS LD IX,P80 LD IY,PHBASE LD A,$05 CALL STARS LD IX,P70 LD IY,PHBAS1 LD A,$05 CALL STARS LD IX,P85 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P75 LD IY,PHBAS1 LD A,$05 CALL STARS LD IX,P89 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P80 LD IY,PHBAS1 LD A,$05 CALL STARS LD IX,P93 LD IY,PHBASE LD A,$04 CALL STARS LD IX,P85 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P97 LD IY,PHBASE LD A,$03 CALL STARS LD IX,P89 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P100 LD IY,PHBASE LD A,$01 CALL STARS LD IX,P93 LD IY,PHBAS1 LD A,$04 CALL STARS LD IX,P97 LD IY,PHBAS1 LD A,$03 CALL STARS LD IX,P100 LD IY,PHBAS1 LD A,$01 CALL STARS LD D, $07 ; ######### BEGINNING OF ONE SCREEN CYCLE (KBD READ + SCROLL LEFT) ######### LD BC,$0000 L0115 LD A, $00 ; keyboard test, all rows (all keys) IN A, ($FE) AND $3F CP $3F RET NZ ; Return to Boot Manager if any key pressed DJNZ L0115 ; cycle the above 256 times DEC C JR NZ,L0115 ; cycle the above 256 times (65536 times total) DEC D JR NZ,L0115 ; cycle the above 7 times (458752 times total) LD B, $20 L0138 PUSH BC ; BC=2000 CALL L0159 ; call SERIAL VIDEO GRAPHIC SCROLL LEFT 4 PIXELS LD HL,$D901 ; *36* video attr start addr for 2nd third of video RAM in startup hw cfg (D9->59 @ ????) -------@@@ LD B, $08 ; ######## 00D5-00E7 mid screen attribute scroll left 1 char ######## L0141 PUSH BC ; BC=0800 (B=08 used as row counter) <--- <--- <--- <--- <---| LD BC,$001F ; screen width in chars minus 1 | LD D,H ; | LD E,L ; DE=D901 | DEC E ; DE=D900 (start of row 1 (of 8) of attr's for middle third of screen) LD A, (DE) ; copy the first attr byte on the row | LDIR ; shift 31 attribute bytes left, first byte overwritten | LD (DE),A ; save the former first byte into the last on the row | INC L ; HL now points to first char on next row | INC E ; DE now points to last char on row | POP BC ; POP back the row counter | DJNZ L0141 ; ---> ---> ---> ---> ---> ---> ---> ---> ---> ---> ---> ---> ->| ######## CALL L0159 ; call SERIAL VIDEO GRAPHIC SCROLL LEFT 4 PIXELS POP BC DJNZ L0138 JP L0110 ; ###### END COBRA GRAPHIC LOGO ROUTINE ######### L0159 LD B, $04 ; ######## SERIAL VIDEO GRAPHIC SCROLL LEFT 4 PIXELS ######## L015B PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <-| LD HL,$CFFF ; *37* address within video memory (end of middle third serial video) (CF->4F @ ????) -------@@@ LD B, $08 ; char row counter in a third of screen | L0161 PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <---| | LD B, $08 ; pixel row counter in a char row | | L0164 PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <-----| | | LD D,H ; \ backup the address for the end of | | | LD E,L ; / current pixel row of serial video in DE | | | LD B, $20 ; width of screen in characters | | | SCF ; start shift with 1 ink bit inserted at right edge of screen-----------+ | | | L016A RL (HL) ; shift left (through CY) the 8 consecutive pixels at (HL) | | | | DEC HL ; move to next char to the left on the same pixel row | | | | DJNZ L016A ; keep doing it until the left side of screen reached | | | | JR C,L0174 ; if ink bit reaches left side of screen it already was copied to right(|)-->| | | | LD A,(DE) ; if no ink bit carried from left screen edge | | | | DEC A ; then delete the 1 ink bit already inserted 6 lines above | | | | LD (DE),A ; | | | | L0174 POP BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <----| | | | OR A ; reset CY flag | | | LD DE,$00E0 ; addr shift to next pixel row up | | | SBC HL, DE ; HL = HL - DE (HL now points to right end of next pixel row up) | | | DJNZ L0164 ; restart left shift for the next pixel row up in current char row ---> ---> ---> ----->| | | LD BC,$07E0 ; addr shift to next char row down | | ADD HL, BC ; HL = HL + BC (HL now points to right end of next char row down) | | POP BC ; retrieve the char row counter for the screen middle | | DJNZ L0161 ; restart left shift for the next char row down in screen middle ---> ---> ---> ---> ---> ----->| | POP BC ; 1 pixel shift completed for entire logo, retrieve pixel shift counter | DJNZ L015B ; if 4 pix shifts not completed, restart shift for entire logo -----> ---> ---> ---> ---> ---> ---> --->| RET ; ######## SERIAL VIDEO GRAPHIC SCROLL LEFT 4 PIXELS END ############# ; ######## SERIAL VIDEO GRAPHIC SCROLL LEFT 128 PIXELS ######## ; circular scroll left on the right half of a character line in the bottom 1/3 of screen ; A=char row (0-7) ;LOOPSHF LD HL,$D71F ; *38* address within video memory (end of middle third serial video) (D7->57 @ ????) -------@@@ ; LD BC,$0020 ;L1SHF5 OR A ; JR Z,L1SHF6 ; ADD HL,BC ; DEC A ; JR NZ,L1SHF5 ;L1SHF6 LD B, $80 ; nr of pixels to scroll left ;L1SHF1 PUSH HL ; PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <---| ; LD B, $08 ; pixel row counter in a char row | ;L1SHF2 PUSH BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <-----| | ; LD D,H ; \ backup the address for the end of | | ; LD E,L ; / current pixel row of serial video in DE | | ; LD B, $10 ; width of screen in characters | | ; SCF ; start shift with 1 ink bit inserted at right edge of screen-----------+ | | ;L1SHF3 RL (HL) ; shift left (through CY) the 8 consecutive pixels at (HL) | | | ; DEC HL ; move to next char to the left on the same pixel row | | | ; DJNZ L1SHF3 ; keep doing it until the left side of screen reached | | | ; JR C,L1SHF4 ;if ink bit reaches left side of screen it already was copied to right(|)-->| | | ; LD A,(DE) ; if no ink bit carried from left screen edge | | | ; DEC A ; then delete the 1 ink bit already inserted 6 lines above | | | ; LD (DE),A ; | | | ;L1SHF4 POP BC ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <----| | | ; OR A ; reset CY flag | | ; LD DE,$00F0 ; addr shift to next pixel row up | | ; SBC HL, DE ; HL = HL - DE (HL now points to right end of next pixel row up) | | ; DJNZ L1SHF2 ; restart left shift for the next pixel row up in current char row ---> ---> ---> ----->| | ; POP BC ; 1 pixel shift completed for entire logo, retrieve pixel shift counter | ; POP HL ; CALL DELAY ; DJNZ L1SHF1 ; if nr of pixels to scroll not completed, restart shift for entire logo -----> ---> ---> ----->| ; RET ; ######## SERIAL VIDEO GRAPHIC SCROLL LEFT 128 PIXELS END ############# MSGCOP LD IY,$8050 ; start of buffer zone LD B,$10 ; message length MSGC PUSH BC ; **** LD C,(IX+0) ; message character LD HL,CBASE ; character definitions base addr LD B,0 ; BC = character to print on 16 bit RL B ; reset CY RL C ; ] multiply RL B ; ] contents of BC RL C ; RL B ; RL C ; RL B ; ] by 8 ADD HL,BC ; HL = char addr in char table PUSH IY POP DE LD BC,$0008 LDIR PUSH DE POP IY INC IX ; go to next char in message POP BC ; **** DJNZ MSGC ; copy all chars in the message to $8050 - 80CF RET ; ######## SERIAL VIDEO PRINT SCROLL LEFT 128 PIXELS ######## ; scroll message left into the right half of a character row in the bottom 1/3 of screen ; A=char row (0-7), IX=start of message string ; show a 16-char message by scrolling it from right into screen MSGPSHL CALL MSGCOP ; ---------------- message copied in buffer zone --------------------- LD IY,$8057 ; bottom line of first char in buffer zone LD HL,$D71F ; *38* address within video memory (D7->57 @ ????) -------@@@ LD BC,$0020 L2SHF5 OR A JR Z,L2SHF6 ADD HL,BC DEC A JR NZ,L2SHF5 L2SHF6 LD B,$10 ; shift distance in characters L2SHF7 PUSH BC ; **##** LD B, $08 ; nr of pixels to scroll left L2SHF1 PUSH IY ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <---| PUSH HL PUSH BC LD B, $08 ; pixel row counter in a char row | L2SHF2 PUSH BC ; **** <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <-----| | LD D,H ; \ backup the address for the end of | | LD E,L ; / current pixel row of serial video in DE | | LD B, $10 ; width of shift area in characters | | RLC (IY+0) ; get first bit of invisible message L2SHF3 RL (HL) ; shift left (through CY) the 8 consecutive pixels at (HL) | | DEC HL ; move to next char to the left on the same pixel row | | DJNZ L2SHF3 ; keep doing it until the left side of shift zone reached | | L2SHF4 POP BC ; **** pixel row counter in a char row | | LD DE,$00F0 ; addr shift to next pixel row up | | SBC HL, DE ; HL = HL - DE (HL now points to right end of next pixel row up) | | DEC IY DJNZ L2SHF2 ; restart left shift for the next pixel row up in current char row ---> ---> ---> ----->| | POP BC ; 1 pixel shift completed for entire logo, retrieve pixel shift counter | POP HL POP IY ; reload addr of bottom line of current char CALL DELAY1 DJNZ L2SHF1 ; if nr of pixels to scroll not completed, restart shift for entire logo -----> ---> ---> ----->| LD BC,$08 ADD IY,BC POP BC ; **##** DJNZ L2SHF7 RET ; ######## SERIAL VIDEO GRAPHIC SCROLL LEFT 128 PIXELS END ############# ; ######## SERIAL VIDEO PRINT SCROLL RIGHT 128 PIXELS ######## ; scroll message right into the left half of a character row in the bottom 1/3 of screen ; A=char row (0-7), IX=start of message string ; show a 16-char message by scrolling it from right into screen MSGPSHR CALL MSGCOP ; ---------------- message copied in buffer zone --------------------- LD IY,$80CF ; bottom line of last char in buffer zone LD HL,$D700 ; *39* address within video memory (D7->57 @ ????) -------@@@ LD BC,$0020 L3SHF5 OR A JR Z,L3SHF6 ADD HL,BC DEC A JR NZ,L3SHF5 L3SHF6 LD B,$10 ; shift distance in characters L3SHF7 PUSH BC ; **##** LD B, $08 ; nr of pixels to scroll right L3SHF1 PUSH IY ; <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <---| PUSH HL PUSH BC LD B, $08 ; pixel row counter in a char row | L3SHF2 PUSH BC ; **** <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <--- <-----| | LD D,H ; \ backup the address for the end of | | LD E,L ; / current pixel row of serial video in DE | | LD B, $10 ; width of shift area in characters | | RRC (IY+0) ; get first bit of invisible message L3SHF3 RR (HL) ; shift right (through CY) the 8 consecutive pixels at (HL) | | INC HL ; move to next char to the right on the same pixel row | | DJNZ L3SHF3 ; keep doing it until the right side of shift zone reached | | L3SHF4 POP BC ; **** pixel row counter in a char row | | LD DE,$0110 ; addr shift to next pixel row up | | SBC HL, DE ; HL = HL - DE (HL now points to left end of next pixel row up) | | DEC IY DJNZ L3SHF2 ; restart left shift for the next pixel row up in current char row ---> ---> ---> ----->| | POP BC ; 1 pixel shift completed for entire logo, retrieve pixel shift counter | POP HL POP IY ; reload addr of bottom line of current char CALL DELAY1 DJNZ L3SHF1 ; if nr of pixels to scroll not completed, restart shift for entire logo -----> ---> ---> ----->| LD B,$08 ; ADD IY,BC L3SHF8 DEC IY DJNZ L3SHF8 POP BC ; **##** DJNZ L3SHF7 RET ; ######## SERIAL VIDEO GRAPHIC SCROLL LEFT 128 PIXELS END ############# DELAY4 LD B,$18 DELAY41 CALL DELAY DJNZ DELAY41 RET DELAY5 EXX LD BC,$0060 LD DE,$9001 LD HL,$9000 LD (HL),0 LDIR EXX RET L0188 DEFB $FF ; ############## GRAPHIC DATA BLOCK ################ DEFB $E0 DEFB $FF DEFB $1F DEFB $B1 DEFB $C8 ; *40* (C8->48) -------@@@ DEFB $45 DEFB $B9 DEFB $22 DEFB $02 DEFB $1F DEFB $A2 DEFB $16 DEFB $22 DEFB $02 DEFB $1F DEFB $A2 DEFB $16 DEFB $25 DEFB $15 DEFB $09 DEFB $75 DEFB $43 DEFB $25 DEFB $BC DEFB $02 DEFB $19 DEFB $25 DEFB $BC DEFB $02 DEFB $19 DEFB $07 DEFB $1D DEFB $D9 DEFB $07 DEFB $1D DEFB $0C DEFB $9A DEFB $C8 ; *41* (C8->48) -------@@@ DEFB $07 DEFB $A5 DEFB $90 DEFB $FF DEFB $88 DEFB $FF DEFB $E5 DEFB $FF DEFB $FF DEFB $31 DEFB $07 DEFB $0C DEFB $82 DEFB $C8 ; *42* (C8->48) -------@@@ DEFB $FF DEFB $FF DEFB $FF DEFB $6D DEFB $7F DEFB $09 DEFB $07 DEFB $F7 DEFB $07 DEFB $DF DEFB $FF DEFB $09 DEFB $CC DEFB $C8 ; *43* (C8->48) -------@@@ DEFB $7B DEFB $92 DEFB $FF DEFB $FF DEFB $EB DEFB $FF DEFB $FF DEFB $C4 DEFB $10 DEFB $AF DEFB $C8 ; *44* (C8->48) -------@@@ DEFB $FC DEFB $02 DEFB $FC DEFB $02 DEFB $FC DEFB $02 DEFB $FC DEFB $02 DEFB $FC DEFB $02 DEFB $FC DEFB $02 DEFB $0B DEFB $F3 DEFB $0B DEFB $06 DEFB $87 DEFB $C8 ; *45* (C8->48) -------@@@ DEFB $C0 DEFB $FF DEFB $FF DEFB $72 DEFB $FF DEFB $0B DEFB $46 DEFB $C8 ; *46* (C8->48) -------@@@ DEFB $74 DEFB $6E DEFB $3D DEFB $52 DEFB $8E DEFB $9F DEFB $FE DEFB $DD DEFB $FF DEFB $82 DEFB $11 DEFB $8C DEFB $C8 ; *47* (C8->48) -------@@@ DEFB $62 DEFB $55 DEFB $20 DEFB $E1 DEFB $70 DEFB $8E DEFB $DA DEFB $A3 DEFB $7A DEFB $5F DEFB $9F DEFB $5F DEFB $CC DEFB $2A DEFB $28 DEFB $08 DEFB $0B DEFB $62 DEFB $C8 ; *48* (C8->48) -------@@@ DEFB $E5 DEFB $FF DEFB $FF DEFB $59 DEFB $F7 DEFB $07 DEFB $A5 DEFB $70 DEFB $B6 DEFB $D1 DEFB $13 DEFB $D1 DEFB $C8 ; *49* (C8->48) -------@@@ DEFB $02 DEFB $02 DEFB $01 DEFB $88 DEFB $37 DEFB $07 DEFB $2E DEFB $90 DEFB $3F DEFB $A5 DEFB $8B DEFB $BF DEFB $02 DEFB $F9 DEFB $FF DEFB $FF DEFB $02 DEFB $02 DEFB $08 DEFB $D1 DEFB $CA ; *50* (CA->4A) -------@@@ DEFB $76 DEFB $90 DEFB $ED DEFB $9A DEFB $2E DEFB $E8 DEFB $07 DEFB $09 DEFB $CC DEFB $C9 ; *51* (C9->49) -------@@@ DEFB $7B DEFB $86 DEFB $78 DEFB $92 DEFB $EB DEFB $9F DEFB $27 DEFB $FC DEFB $0B DEFB $AC DEFB $C8 ; *52* (C8->48) -------@@@ DEFB $22 DEFB $0B DEFB $F3 DEFB $FC DEFB $FF DEFB $FA DEFB $FF DEFB $C7 DEFB $FF DEFB $1C DEFB $03 DEFB $BB DEFB $CD ; *53* (CD->4D) -------@@@ DEFB $B4 DEFB $F6 DEFB $10 DEFB $2A DEFB $C8 ; *54* (C8->48) -------@@@ DEFB $C6 DEFB $54 DEFB $03 DEFB $FD DEFB $72 DEFB $38 DEFB $F5 DEFB $DC DEFB $7B DEFB $30 DEFB $02 DEFB $F8 DEFB $32 DEFB $A6 DEFB $26 DEFB $0C DEFB $66 DEFB $C8 ; *55* (C8->48) -------@@@ DEFB $28 DEFB $FC DEFB $BB DEFB $FF DEFB $DE DEFB $FB DEFB $E4 DEFB $BA DEFB $08 DEFB $FA DEFB $07 DEFB $01 DEFB $46 DEFB $CF ; *56* (CF->4F) -------@@@ DEFB $01 DEFB $46 DEFB $CE ; *57* (CE->4E) -------@@@ DEFB $05 DEFB $CC DEFB $CA ; *58* (CA->4A) -------@@@ DEFB $FF DEFB $FA DEFB $7E DEFB $45 DEFB $01 DEFB $46 DEFB $CC ; *59* (CC->4C) -------@@@ DEFB $01 DEFB $46 DEFB $CB ; *60* (CB->4B) -------@@@ DEFB $0C DEFB $91 DEFB $C8 ; *61* (C8->48) -------@@@ DEFB $B6 DEFB $FD DEFB $E1 DEFB $9B DEFB $7E DEFB $85 DEFB $FD DEFB $FF DEFB $61 DEFB $79 DEFB $2D DEFB $0A DEFB $24 DEFB $C9 ; *62* (C9->49) -------@@@ DEFB $6A DEFB $FC DEFB $57 DEFB $EC DEFB $F5 DEFB $FB DEFB $08 DEFB $56 DEFB $AB DEFB $02 DEFB $CC DEFB $CB ; *63* (CB->4B) -------@@@ DEFB $BF DEFB $04 DEFB $ED DEFB $CA ; *64* (CA->4A) -------@@@ DEFB $E1 DEFB $BF DEFB $DD DEFB $03 DEFB $D1 DEFB $CB ; *65* (CB->4B) -------@@@ DEFB $95 DEFB $29 DEFB $01 DEFB $E6 DEFB $C8 DEFB $0D DEFB $C3 DEFB $C8 ; *66* (C8->48) -------@@@ DEFB $CD DEFB $62 DEFB $F3 DEFB $5A DEFB $E3 DEFB $FF DEFB $A1 DEFB $40 DEFB $1E DEFB $4A DEFB $02 DEFB $59 DEFB $0D DEFB $8F DEFB $CA ; *67* (CA->4A) -------@@@ DEFB $FC DEFB $02 DEFB $97 DEFB $9B DEFB $08 DEFB $02 DEFB $09 DEFB $F5 DEFB $09 DEFB $2A DEFB $62 DEFB $BB DEFB $01 DEFB $E6 DEFB $C8 DEFB $04 DEFB $F0 DEFB $CA ; *68* (CA->4A) -------@@@ DEFB $F8 DEFB $DD DEFB $A8 DEFB $02 DEFB $C3 DEFB $C9 ; *69* (C9->49) -------@@@ DEFB $7F DEFB $14 DEFB $94 DEFB $C8 ; *70* (C8->48) !! -------@@@ DEFB $02 DEFB $5C DEFB $FB DEFB $A0 DEFB $FF DEFB $22 DEFB $02 DEFB $52 DEFB $A9 DEFB $02 DEFB $19 DEFB $09 DEFB $4D DEFB $A7 DEFB $09 DEFB $ED DEFB $AA DEFB $02 DEFB $5C DEFB $0C DEFB $43 DEFB $C8 ; *71* (C8->48) -------@@@ DEFB $B5 DEFB $EA DEFB $3F DEFB $E3 DEFB $BA DEFB $40 DEFB $C2 DEFB $FF DEFB $FF DEFB $11 DEFB $FF DEFB $07 DEFB $43 DEFB $C9 ; *72* (C9->49) -------@@@ DEFB $E4 DEFB $9A DEFB $84 DEFB $AA DEFB $7F DEFB $02 DEFB $07 DEFB $ED DEFB $C9 ; *73* (C9->49) -------@@@ DEFB $FA DEFB $7E DEFB $BF DEFB $FF DEFB $FF DEFB $45 DEFB $17 DEFB $26 DEFB $C8 ; *74* (C8->48) !! -------@@@ DEFB $D4 DEFB $98 DEFB $02 DEFB $1C DEFB $02 DEFB $DC DEFB $02 DEFB $1C DEFB $02 DEFB $52 DEFB $FD DEFB $20 DEFB $FD DEFB $8C DEFB $02 DEFB $1C DEFB $DF DEFB $02 DEFB $1C DEFB $06 DEFB $ED DEFB $11 DEFB $2A DEFB $28 DEFB $C8 ; *75* (C8->48) !! -------@@@ DEFB $6A DEFB $02 DEFB $1C DEFB $02 DEFB $3C DEFB $9F DEFB $02 DEFB $1C DEFB $02 DEFB $3C DEFB $05 DEFB $99 DEFB $02 DEFB $1C DEFB $02 DEFB $3C DEFB $05 DEFB $0A DEFB $8E DEFB $02 DEFB $1C DEFB $02 DEFB $42 DEFB $B9 DEFB $02 DEFB $1C DEFB $9F DEFB $02 DEFB $3C DEFB $02 DEFB $1C DEFB $9F DEFB $02 DEFB $3C DEFB $02 DEFB $1C DEFB $9F DEFB $02 DEFB $3C DEFB $02 DEFB $1C DEFB $01 DEFB $E6 DEFB $C8 DEFB $17 DEFB $8D DEFB $C8 ; *76* (C8->48) !! -------@@@ DEFB $26 DEFB $02 DEFB $31 DEFB $03 DEFB $38 DEFB $66 DEFB $6D DEFB $91 DEFB $6D DEFB $2D DEFB $63 DEFB $06 DEFB $02 DEFB $63 DEFB $D1 DEFB $06 DEFB $F8 DEFB $FF DEFB $9F DEFB $46 DEFB $02 DEFB $15 DEFB $06 DEFB $25 DEFB $C8 ; *77* (C8->48) -------@@@ DEFB $BE DEFB $43 DEFB $FF DEFB $FB DEFB $C0 DEFB $08 DEFB $E9 DEFB $C9 ; *78* (C9->49) -------@@@ DEFB $3C DEFB $02 DEFB $3D DEFB $E1 DEFB $DD DEFB $9D DEFB $83 DEFB $29 DEFB $E6 DEFB $C8 ; *79* (C8->48) !! -------@@@ DEFB $01 DEFB $5F DEFB $9D DEFB $01 DEFB $07 DEFB $37 DEFB $1F DEFB $9D DEFB $01 DEFB $1D DEFB $01 DEFB $1D DEFB $01 DEFB $1F DEFB $9E DEFB $01 DEFB $1C DEFB $01 DEFB $1C DEFB $01 DEFB $9D DEFB $01 DEFB $5D DEFB $01 DEFB $20 DEFB $7C DEFB $01 DEFB $3E DEFB $01 DEFB $1C DEFB $01 DEFB $20 DEFB $27 DEFB $54 DEFB $01 DEFB $5D DEFB $01 DEFB $20 DEFB $7C DEFB $01 DEFB $01 DEFB $45 DEFB $C8 ; *80* (C8->48) -------@@@ DEFB $C3 DEFB $01 DEFB $87 DEFB $C8 ; *81* (C8->48) -------@@@ DEFB $03 DEFB $01 DEFB $87 DEFB $C9 ; *82* (C9->49) -------@@@ DEFB $01 DEFB $01 DEFB $68 DEFB $CE ; *83* (CE->4E) -------@@@ DEFB $E0 DEFB $01 DEFB $67 DEFB $CF ; *84* (CF->4F) -------@@@ DEFB $07 DEFB $0A DEFB $03 DEFB $D9 ; *85* (D9->59) BLUE CROWN -------@@@ DEFB $01 DEFB $02 DEFB $27 DEFB $D9 ; *86* (D9->59) YELLOW EYE -------@@@ DEFB $35 DEFB $01 DEFB $47 DEFB $D9 ; *87* (D9->59) RED MOUTH -------@@@ DEFB $15 DEFB $04 DEFB $48 DEFB $D9 ; *88* (D9->59) RED TONGUE -------@@@ DEFB $02 DEFB $01 DEFB $8B DEFB $D9 ; *89* (D9->59) -------@@@ DEFB $03 DEFB $01 DEFB $AB DEFB $D9 ; *90* (D9->59) -------@@@ DEFB $03 L03E0 DEFB $07 DEFB $0E DEFB $15 DEFB $1C DEFB $23 DEFB $2A DEFB $31 DEFB $38 ; ################ END OF GRAPHIC BLOCK ################ ; ################ ANNIVERSARY GRAPHIC BLOCK - generated with SPECTRA Image Converter.exe from PNG drawn manually - logo in middle 1/3 ################ ; =========================================================================== 2/3 ================================================================================= ; --------------------------------------------------- compress data by replacing part of it with algorithm ---------------------------------------------------------- ;L4800 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4820 DEFB $00, $00, $00, $00, $00, $0F, $FF, $80, $00, $00, $00, $07, $FC, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4840 DEFB $00, $00, $00, $00, $00, $00, $01, $FF, $F8, $00, $1F, $FC, $07, $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4860 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4880 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $F8, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $1F, $E0, $00, $0F, $FF, $FF, $00, $0F, $F0, $00, $00, $00, $00, $00 ;L48A0 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $03, $FC, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L48C0 DEFB $00, $00, $00, $00, $00, $00, $00, $03, $FE, $00, $7F, $C0, $00, $7F, $C0, $00, $00, $1F, $F0, $FF, $80, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L48E0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $80, $00, $01, $FF, $FF, $F0, $00, $00, $00, $7F, $FF, $FF, $E0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4900 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4920 DEFB $00, $00, $00, $00, $00, $0F, $FF, $F8, $00, $00, $00, $1F, $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4940 DEFB $00, $00, $00, $00, $00, $00, $00, $1F, $FC, $00, $3F, $F0, $01, $FF, $80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4960 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4980 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $F0, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $1F, $F0, $00, $0F, $FF, $FF, $80, $0F, $F0, $00, $00, $00, $00, $00 ;L49A0 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $03, $FC, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L49C0 DEFB $00, $00, $00, $00, $00, $00, $00, $07, $FC, $00, $3F, $E0, $00, $FF, $80, $00, $00, $1F, $E0, $7F, $80, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L49E0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FE, $00, $00, $00, $7F, $FF, $C0, $00, $00, $00, $FF, $FF, $FF, $F0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4A00 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4A20 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FE, $00, $00, $00, $7F, $FF, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4A40 DEFB $00, $00, $00, $00, $00, $00, $00, $07, $FC, $00, $3F, $E0, $00, $FF, $80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4A60 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4A80 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $F0, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $0F, $F0, $00, $0F, $FF, $FF, $C0, $0F, $F0, $00, $00, $00, $00, $00 ;L4AA0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $07, $FF, $FE, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4AC0 DEFB $00, $00, $00, $00, $00, $00, $00, $1F, $FC, $00, $3F, $F0, $01, $FF, $80, $00, $00, $1F, $E0, $7F, $80, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4AE0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $F8, $00, $00, $00, $1F, $FF, $00, $00, $00, $00, $FF, $FF, $FF, $F0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4B00 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4B20 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $80, $00, $01, $FF, $FF, $F0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4B40 DEFB $00, $00, $00, $00, $00, $00, $00, $03, $FE, $00, $7F, $C0, $00, $7F, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4B60 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4B80 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $F8, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $0F, $F0, $00, $0F, $FF, $FF, $C0, $0F, $F0, $00, $00, $00, $00, $00 ;L4BA0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $07, $F9, $FE, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4BC0 DEFB $00, $00, $00, $00, $00, $00, $01, $FF, $F8, $00, $1F, $FC, $07, $FF, $00, $00, $00, $3F, $E0, $7F, $C0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4BE0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $80, $00, $00, $00, $07, $FC, $00, $00, $00, $00, $FF, $FF, $FF, $F0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4C00 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4C20 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $C0, $00, $03, $FF, $FF, $F8, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4C40 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4C60 DEFB $00, $00, $00, $00, $00, $00, $00, $03, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $3F, $C0, $00, $0F, $FF, $C0, $00, $0F, $F0, $00, $00, $00, $00, $00 ;L4C80 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $0F, $F8, $00, $0F, $F0, $FF, $E0, $0F, $F0, $00, $00, $00, $00, $00 ;L4CA0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $07, $F9, $FE, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4CC0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $F8, $00, $1F, $FF, $FF, $FF, $00, $00, $00, $3F, $FF, $FF, $C0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4CE0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4D00 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4D20 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $E0, $00, $07, $FF, $FF, $FC, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4D40 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4D60 DEFB $00, $00, $00, $00, $00, $00, $00, $0F, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $3F, $C0, $00, $0F, $FF, $F0, $00, $0F, $F0, $00, $00, $00, $00, $00 ;L4D80 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $07, $F8, $00, $0F, $F0, $3F, $E0, $0F, $F0, $00, $00, $00, $00, $00 ;L4DA0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $0F, $F9, $FF, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4DC0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $F0, $00, $0F, $FF, $FF, $FE, $00, $00, $00, $3F, $FF, $FF, $C0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4DE0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4E00 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4E20 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $F0, $00, $0F, $FF, $FF, $FE, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4E40 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4E60 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $3F, $E0, $00, $0F, $FF, $FC, $00, $0F, $F0, $00, $00, $00, $00, $00 ;L4E80 DEFB $00, $00, $00, $00, $00, $00, $00, $0F, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $07, $F8, $00, $0F, $F0, $1F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4EA0 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $0F, $F0, $FF, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4EC0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $E0, $00, $07, $FF, $FF, $FC, $00, $00, $00, $7F, $FF, $FF, $E0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4EE0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4F00 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4F20 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $F8, $00, $1F, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4F40 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L4F60 DEFB $00, $00, $00, $00, $00, $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $1F, $E0, $00, $0F, $FF, $FE, $00, $0F, $F0, $00, $00, $00, $00, $00 ;L4F80 DEFB $00, $00, $00, $00, $00, $00, $00, $03, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $07, $FC, $00, $0F, $F0, $1F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4FA0 DEFB $00, $00, $00, $00, $00, $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $0F, $F0, $FF, $00, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4FC0 DEFB $00, $00, $00, $00, $00, $0F, $FF, $FF, $C0, $00, $03, $FF, $FF, $F8, $00, $00, $00, $7F, $FF, $FF, $E0, $0F, $F0, $0F, $F0, $0F, $F0, $00, $00, $00, $00, $00 ;L4FE0 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ---------------------------------------------------- COMPRESSED SERIAL DATA - logo in bottom 1/3------------------------------------------------------------------ ;L5000 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5025 DEFB $0F, $FF, $80, $00, $00, $00, $07, $FC, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5045 DEFB $00, $01, $FF, $F8, $00, $1F, $FC, $07, $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5065 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5085 DEFB $00, $7F, $FF, $F8, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $1F, $E0, $00, $0F, $FF, $FF, $00, $0F, $F0 L50A5 DEFB $00, $00, $01, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $03, $FC, $00, $0F, $F0, $0F, $F0, $0F, $F0 L50C5 DEFB $00, $00, $03, $FE, $00, $7F, $C0, $00, $7F, $C0, $00, $00, $1F, $F0, $FF, $80, $0F, $F0, $0F, $F0, $0F, $F0 L50E5 DEFB $0F, $FF, $FF, $80, $00, $01, $FF, $FF, $F0, $00, $00, $00, $7F, $FF, $FF, $E0, $0F, $F0, $0F, $F0, $0F, $F0 ;L5100 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5125 DEFB $0F, $FF, $F8, $00, $00, $00, $1F, $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5145 DEFB $00, $00, $1F, $FC, $00, $3F, $F0, $01, $FF, $80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5165 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5185 DEFB $00, $7F, $FF, $F0, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $1F, $F0, $00, $0F, $FF, $FF, $80, $0F, $F0 L51A5 DEFB $00, $00, $01, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $03, $FC, $00, $0F, $F0, $0F, $F0, $0F, $F0 L51C5 DEFB $00, $00, $07, $FC, $00, $3F, $E0, $00, $FF, $80, $00, $00, $1F, $E0, $7F, $80, $0F, $F0, $0F, $F0, $0F, $F0 L51E5 DEFB $0F, $FF, $FE, $00, $00, $00, $7F, $FF, $C0, $00, $00, $00, $FF, $FF, $FF, $F0, $0F, $F0, $0F, $F0, $0F, $F0 ;L5200 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5225 DEFB $0F, $FF, $FE, $00, $00, $00, $7F, $FF, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5245 DEFB $00, $00, $07, $FC, $00, $3F, $E0, $00, $FF, $80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5265 DEFB $00, $00, $01, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5285 DEFB $00, $7F, $FF, $F0, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $0F, $F0, $00, $0F, $FF, $FF, $C0, $0F, $F0 L52A5 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $07, $FF, $FE, $00, $0F, $F0, $0F, $F0, $0F, $F0 L52C5 DEFB $00, $00, $1F, $FC, $00, $3F, $F0, $01, $FF, $80, $00, $00, $1F, $E0, $7F, $80, $0F, $F0, $0F, $F0, $0F, $F0 L52E5 DEFB $0F, $FF, $F8, $00, $00, $00, $1F, $FF, $00, $00, $00, $00, $FF, $FF, $FF, $F0, $0F, $F0, $0F, $F0, $0F, $F0 ;L5300 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5325 DEFB $0F, $FF, $FF, $80, $00, $01, $FF, $FF, $F0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5345 DEFB $00, $00, $03, $FE, $00, $7F, $C0, $00, $7F, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5365 DEFB $00, $00, $01, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5385 DEFB $00, $7F, $FF, $F8, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $0F, $F0, $00, $0F, $FF, $FF, $C0, $0F, $F0 L53A5 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $07, $F9, $FE, $00, $0F, $F0, $0F, $F0, $0F, $F0 L53C5 DEFB $00, $01, $FF, $F8, $00, $1F, $FC, $07, $FF, $00, $00, $00, $3F, $E0, $7F, $C0, $0F, $F0, $0F, $F0, $0F, $F0 L53E5 DEFB $0F, $FF, $80, $00, $00, $00, $07, $FC, $00, $00, $00, $00, $FF, $FF, $FF, $F0, $0F, $F0, $0F, $F0, $0F, $F0 ;L5400 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5425 DEFB $0F, $FF, $FF, $C0, $00, $03, $FF, $FF, $F8, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5445 DEFB $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5465 DEFB $00, $00, $03, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $3F, $C0, $00, $0F, $FF, $C0, $00, $0F, $F0 L5485 DEFB $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $0F, $F8, $00, $0F, $F0, $FF, $E0, $0F, $F0 L54A5 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $07, $F9, $FE, $00, $0F, $F0, $0F, $F0, $0F, $F0 L54C5 DEFB $0F, $FF, $FF, $F8, $00, $1F, $FF, $FF, $FF, $00, $00, $00, $3F, $FF, $FF, $C0, $0F, $F0, $0F, $F0, $0F, $F0 L54E5 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L5500 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5525 DEFB $0F, $FF, $FF, $E0, $00, $07, $FF, $FF, $FC, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5545 DEFB $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5565 DEFB $00, $00, $0F, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $3F, $C0, $00, $0F, $FF, $F0, $00, $0F, $F0 L5585 DEFB $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $07, $F8, $00, $0F, $F0, $3F, $E0, $0F, $F0 L55A5 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $0F, $F9, $FF, $00, $0F, $F0, $0F, $F0, $0F, $F0 L55C5 DEFB $0F, $FF, $FF, $F0, $00, $0F, $FF, $FF, $FE, $00, $00, $00, $3F, $FF, $FF, $C0, $0F, $F0, $0F, $F0, $0F, $F0 L55E5 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L5600 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5625 DEFB $0F, $FF, $FF, $F0, $00, $0F, $FF, $FF, $FE, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5645 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5665 DEFB $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $3F, $E0, $00, $0F, $FF, $FC, $00, $0F, $F0 L5685 DEFB $00, $00, $0F, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $07, $F8, $00, $0F, $F0, $1F, $F0, $0F, $F0 L56A5 DEFB $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $0F, $F0, $FF, $00, $0F, $F0, $0F, $F0, $0F, $F0 L56C5 DEFB $0F, $FF, $FF, $E0, $00, $07, $FF, $FF, $FC, $00, $00, $00, $7F, $FF, $FF, $E0, $0F, $F0, $0F, $F0, $0F, $F0 L56E5 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L5700 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5725 DEFB $0F, $FF, $FF, $F8, $00, $1F, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5745 DEFB $00, $00, $00, $FF, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 L5765 DEFB $00, $7F, $FF, $FC, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $1F, $E0, $00, $0F, $FF, $FE, $00, $0F, $F0 L5785 DEFB $00, $00, $03, $FE, $00, $FF, $00, $00, $1F, $E0, $00, $00, $00, $07, $FC, $00, $0F, $F0, $1F, $F0, $0F, $F0 L57A5 DEFB $00, $00, $01, $FE, $00, $7F, $80, $00, $3F, $C0, $00, $00, $0F, $F0, $FF, $00, $0F, $F0, $0F, $F0, $0F, $F0 L57C5 DEFB $0F, $FF, $FF, $C0, $00, $03, $FF, $FF, $F8, $00, $00, $00, $7F, $FF, $FF, $E0, $0F, $F0, $0F, $F0, $0F, $F0 L57E5 DEFB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; ===================================================================== end of 2/3 ================================================================================= ; ------------- VIDEO ATTR FOR ANNIVERSARY GRAPHIC BLOCK - generated with SPECTRA Image Converter.exe from PNG drawn manually - logo in middle 1/3 ------------ ; =========================================================================== 2/3 ================================================================================= ; successfully replaced by algorithm ;L5900 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L5920 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L5940 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;L5960 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00, $00, $00, $00, $00 ;L5980 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00, $00, $00, $00, $00 ;L59A0 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00, $00, $00, $00, $00 ;L59C0 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00, $00, $00, $00, $00 ;L59E0 DEFB $00, $00, $00, $00, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $00, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00, $00, $00, $00, $00 ; ===================================================================== end of 2/3 ================================================================================= ; ############ END OF ANNIVERSARY GRAPHIC BLOCK ############# M_20 DEFM "ITC BRASOV - 1986-2016" DEFB 0 M_21 DEFM "30 ANI DE LA PROIECTAREA COBRA" DEFB 0 M_31 DEFM "DE CATRE O ECHIPA FORMATA DIN:" DEFB 0 M_22 DEFM "GHEORGHE TOACSE" DEFB 0 M_23 DEFM " VASILE PRODAN " DEFB 0 M_24 DEFM " WAGNER BERND " DEFB 0 M_25 DEFM " SORIN FINICHIU " DEFB 0 M_26 DEFM " MIRCEA UNGUR " DEFB 0 M_27 DEFM " MARCEL AREFTA " DEFB 0 M_28 DEFM " MIRCEA POP " DEFB 0 M_29 DEFM " SORIN CISMAS " DEFB 0 M_30 DEFM " ALEXANDRU ANTAL" DEFB 0 FLASH DEFB $41,$42,$43,$44,$45,$46,$47,$46,$45,$44,$43,$42 ; ########## TABLE HOLDING STAR POSITIONS (ROW/COL) & COLOR ATTR ADDRESSES (ATTR NOT STORED ANYMORE, NOW CALCULATED) ########## P01 DEFW $0000 ; attr at $5800 ;AT01 DEFW $5800 P02 DEFW $0200 ; attr at $5840 ;AT02 DEFW $5840 P03 DEFW $0101 ; attr at $5821 ;AT03 DEFW $5821 P04 DEFW $0002 ; attr at $5802 ;AT04 DEFW $5802 P05 DEFW $0400 ; attr at $5880 ;AT05 DEFW $5880 P06 DEFW $0301 ; attr at $5861 ;AT06 DEFW $5861 P07 DEFW $0600 ; attr at $58C0 ;AT07 DEFW $58C0 P08 DEFW $0501 ; attr at $58A1 ;AT08 DEFW $58A1 ;;P09 DEFW $0303 ; attr at $5863 ; moved ;;AT09 DEFW $5863 ; P10 DEFW $0800 ; attr at $5900 ;AT10 DEFW $5900 P11 DEFW $0701 ; attr at $5801 ;AT11 DEFW $58E1 P09 DEFW $0404 ; attr at $5863 ;AT09 DEFW $5884 P12 DEFW $0305 ; attr at $5865 ;AT12 DEFW $5865 P13 DEFW $0A00 ; attr at $5940 ;AT13 DEFW $5940 P14 DEFW $0901 ; attr at $5921 ;AT14 DEFW $5921 P15 DEFW $0802 ; attr at $5902 ;AT15 DEFW $5902 P46 DEFW $0505 ; attr at $58A5 ;AT46 DEFW $58A5 P16 DEFW $0C00 ; attr at $5980 ;AT16 DEFW $5980 P17 DEFW $0B01 ; attr at $5961 ;AT17 DEFW $5961 P18 DEFW $0A02 ; attr at $5942 ;AT18 DEFW $5942 P19 DEFW $0903 ; attr at $5923 ;AT19 DEFW $5923 P101 DEFW $0507 ; attr at $58A7 ;AT101 DEFW $58A7 P20 DEFW $010B ; attr at $582B ;AT20 DEFW $582B P21 DEFW $000C ; attr at $580C ;AT21 DEFW $580C P22 DEFW $0E00 ; attr at $59C0 ;AT22 DEFW $59C0 P23 DEFW $0D01 ; attr at $59A1 ;AT23 DEFW $59A1 P24 DEFW $0C02 ; attr at $5982 ;AT24 DEFW $5982 P25 DEFW $0B03 ; attr at $5963 ;AT25 DEFW $5963 P102 DEFW $0509 ; attr at $58A9 ;AT102 DEFW $58A9 P103 DEFW $040A ; attr at $588A ;AT103 DEFW $588A P26 DEFW $020C ; attr at $584C ;AT26 DEFW $584C P27 DEFW $010D ; attr at $582D ;AT27 DEFW $582D P28 DEFW $000E ; attr at $580E ;AT28 DEFW $580E P29 DEFW $0F01 ; attr at $59E1 ;AT29 DEFW $59E1 P30 DEFW $0E02 ; attr at $59C2 ;AT30 DEFW $59C2 P31 DEFW $0D03 ; attr at $59A3 ;AT31 DEFW $59A3 P32 DEFW $020E ; attr at $584E ;AT32 DEFW $584E P33 DEFW $010F ; attr at $582F ;AT33 DEFW $582F P34 DEFW $0010 ; attr at $5810 ;AT34 DEFW $5810 P35 DEFW $0F03 ; attr at $59E3 ;AT35 DEFW $59E3 P36 DEFW $0210 ; attr at $5850 ;AT36 DEFW $5850 P37 DEFW $0111 ; attr at $5831 ;AT37 DEFW $5831 P38 DEFW $0012 ; attr at $5812 ;AT38 DEFW $5812 P39 DEFW $0212 ; attr at $5852 ;AT39 DEFW $5852 P40 DEFW $0113 ; attr at $5833 ;AT40 DEFW $5833 P41 DEFW $0014 ; attr at $5814 ;AT41 DEFW $5814 P42 DEFW $080E ; attr at $590E ;AT42 DEFW $590E P43 DEFW $0214 ; attr at $5854 ;AT43 DEFW $5854 P44 DEFW $0115 ; attr at $5835 ;AT44 DEFW $5835 P45 DEFW $0016 ; attr at $5816 ;AT45 DEFW $5816 ;;P46 DEFW $0A0E ; attr at ; moved ;;AT46 DEFW $594E ; P47 DEFW $090F ; attr at $592F ;AT47 DEFW $592F P48 DEFW $0810 ; attr at $5910 ;AT48 DEFW $5910 P49 DEFW $0216 ; attr at $5856 ;AT49 DEFW $5856 P50 DEFW $0117 ; attr at $5837 ;AT50 DEFW $5837 P51 DEFW $0018 ; attr at $5818 ;AT51 DEFW $5818 P52 DEFW $0A10 ; attr at $5950 ;AT52 DEFW $5950 P53 DEFW $0911 ; attr at $5931 ;AT53 DEFW $5931 P54 DEFW $0812 ; attr at $5912 ;AT54 DEFW $5912 P55 DEFW $0218 ; attr at $5858 ;AT55 DEFW $5858 P56 DEFW $0119 ; attr at $5839 ;AT56 DEFW $5839 P57 DEFW $001A ; attr at $581A ;AT57 DEFW $581A P58 DEFW $0A12 ; attr at $5952 ;AT58 DEFW $5952 P59 DEFW $0913 ; attr at $5933 ;AT59 DEFW $5933 P60 DEFW $0814 ; attr at $5914 ;AT60 DEFW $5914 P61 DEFW $021A ; attr at $585A ;AT61 DEFW $585A P62 DEFW $011B ; attr at $583B ;AT62 DEFW $583B P63 DEFW $001C ; attr at $581C ;AT63 DEFW $581C P64 DEFW $0A14 ; attr at $5954 ;AT64 DEFW $5954 P65 DEFW $0915 ; attr at $5935 ;AT65 DEFW $5935 P66 DEFW $0816 ; attr at $5916 ;AT66 DEFW $5916 P67 DEFW $021C ; attr at $585C ;AT67 DEFW $585C P68 DEFW $011D ; attr at $583D ;AT68 DEFW $583D P69 DEFW $001E ; attr at $581E ;AT69 DEFW $581E P70 DEFW $0A16 ; attr at $5956 ;AT70 DEFW $5956 P71 DEFW $0917 ; attr at $5937 ;AT71 DEFW $5937 P72 DEFW $0818 ; attr at $5918 ;AT72 DEFW $5918 P73 DEFW $021E ; attr at $585E ;AT73 DEFW $585E P74 DEFW $011F ; attr at $583F ;AT74 DEFW $583F P75 DEFW $0A18 ; attr at $5958 ;AT75 DEFW $5958 P76 DEFW $0919 ; attr at $5939 ;AT76 DEFW $5939 P77 DEFW $081A ; attr at $591A ;AT77 DEFW $591A P78 DEFW $041E ; attr at $589E ;AT78 DEFW $589E P79 DEFW $031F ; attr at $587F ;AT79 DEFW $587F P80 DEFW $0A1A ; attr at $595A ;AT80 DEFW $595A P81 DEFW $091B ; attr at $593B ;AT81 DEFW $593B P82 DEFW $081C ; attr at $591C ;AT82 DEFW $591C P83 DEFW $061E ; attr at $59DE ;AT83 DEFW $59DE P84 DEFW $051F ; attr at $58BF ;AT84 DEFW $58BF P85 DEFW $0A1C ; attr at $595C ;AT85 DEFW $595C P86 DEFW $091D ; attr at $593D ;AT86 DEFW $593D P87 DEFW $081E ; attr at $591E ;AT87 DEFW $591E P88 DEFW $071F ; attr at $58FF ;AT88 DEFW $58FF P89 DEFW $0C1C ; attr at $599C ;AT89 DEFW $599C P90 DEFW $0B1D ; attr at $597D ;AT90 DEFW $597D P91 DEFW $0A1E ; attr at $595E ;AT91 DEFW $595E P92 DEFW $091F ; attr at $593F ;AT92 DEFW $593F P93 DEFW $0E1C ; attr at $59DC ;AT93 DEFW $59DC P94 DEFW $0D1D ; attr at $59BD ;AT94 DEFW $59BD P95 DEFW $0C1E ; attr at $599E ;AT95 DEFW $599E P96 DEFW $0B1F ; attr at $597F ;AT96 DEFW $597F P97 DEFW $0F1D ; attr at $59FD ;AT97 DEFW $59FD P98 DEFW $0E1E ; attr at $59DE ;AT98 DEFW $59DE P99 DEFW $0D1F ; attr at $59BF ;AT99 DEFW $59BF P100 DEFW $0F1F ; attr at $59FF ;AT100 DEFW $59FF